絞り込み条件を変更する
検索条件を絞り込む

すべてのカテゴリ

5 件中 1 - 5 件表示
カバー画像

【C++】親クラスのデストラクタをvirtualにしなければならない理由

こんにちは!アーロンと申します。ココナラでは初めてのブログなので、何を書けばよいかイマイチわかりませんが…笑このブログでは、C/C++に関するノウハウを少しずつ書いていければと思います。今日のタイトルは「デストラクタをvirtualにしなければならない理由」です。「そんなの当り前じゃないか!何を今更言ってるんだ!?」と即答できるあなたは、きちんとC++を理解している方だと思います。ですが、残念ながらプロの世界でも、これを知らない人が大勢います。僕は本業でも組み込みエンジニアをしておりますが、この原則を守っていないコードを見ることが多々あります。C++はオブジェクト指向言語ですので、親クラスと子クラスを定義して、いわゆるポリモーフィズムを実現できます。これは、親クラスで定義した仮想関数を、子クラスでオーバーライド(上書き)出来るというものです。この時、子クラスでオーバーライドを許可するメソッド(関数)には、予め親クラス側でvirtualというキーワードをつける必要があります。virtualをつけなければ、子クラスで親クラスのメソッドを上書きできず、親クラスのポインタ経由で子クラスのメソッドを呼び出した場合は、親クラス側のメソッドが呼ばれてしまいます。デストラクタも同じで、virtualをつけなければ、オブジェクトが破棄されるときに、子クラスのデストラクタがコールされません。子クラス側のデストラクタでリソースを開放する処理を記述していた場合は、見事にリソースリークに陥る訳です。<今日の結論>親クラスとして定義するクラスのデストラクタには、必ずvirtualをつけましょう。
0
カバー画像

UE5でc++のプログラムを実装する際のエラー対処

初めましていおです。今回、ノートPCでC++のプログラムをコンパイルしたせいにエラーが出てしまって苦労したので、対処法を載せておきます。.NET Framework SDKのエラーの場合Visual Studio Installerから2019を選び変更で最新の NET Framework 〇.〇.〇 SDK」のチェックボックスにチェックを入れ、変更する。エラー文でurlが貼ってある場合かInstall a version of .NET Framework SDK at 4.6.0 or highエラー文のURLをコピペ、ダウンロードか.NRT SDKを調べてダウンロード選択肢がVisual Studio 2019で開くとキャンセルの2つの場合がある際エラーコードUE、Visual Studio 2019の再インストール再インストールでも実行できない場合、pcのファイルがonedraiveで同期されている場合、エラーが出るので、動機を解除する。onedraiveのドキュメントでないか確認する、onedraiveのドキュメントだった場合ローカルディスクからユーザーを選択し自分の好きなところにダウンロード
0
カバー画像

switch文の一番最初にdefaultを書くとどうなるか

もしかしたらcaseの方の条件でもdefaultの方にプログラム流れてしまうのではないかと疑問に思い、実験してみました。環境は次の通りです。・OS:Windows 11 Home・開発環境:Microsoft Visual Studio Community 2022(64ビット)ソースは次の通りです。実行結果0を入力1を入力2を入力0~2は通常通り動きました。続いて、3を入力通常通り、caseの方の条件のときはdefaultには流れず、case以外の条件のときにdefaultに流れました。ただ、一般的にdefaultは一番下に書くためこのように一見するとちゃんと動くか分からないようなコードは現場では使うべきではないかと思います。もちろんコーディング規約などで決まっているのであればそれに従ってやる分には問題ありません。サービス出品してます。ぜひご覧ください。
0
カバー画像

C++で学ぶ効率的なメモリ管理

C++は強力な言語ですが、メモリ管理はプログラマーの責任です。効率的なメモリ管理は、プログラムのパフォーマンスと安定性に大きく影響します。以下に、C++で効率的なメモリ管理を学ぶための重要なポイントを紹介します。1. メモリリークの防止new/deleteのペア使用: `new`でメモリを動的に割り当てたら、必ず対応する `delete` で解放しましょう。スマートポインタの使用: `unique_ptr`, `shared_ptr` などのスマートポインタは、自動的にメモリ解放を管理し、メモリリークを防ぐのに役立ちます。RAII (Resource Acquisition Is Initialization): リソースの取得と解放をオブジェクトのコンストラクタとデストラクタに結び付けることで、メモリリークを防ぎます。2. メモリ断片化の防止メモリ割り当ての最適化: 必要なメモリを適切に予測し、一度に十分なメモリを確保することで、断片化を減らすことができます。メモリプール: 頻繁に同じサイズのメモリを割り当てる場合、メモリプールを使用することで、断片化を減らすことができます。メモリアロケータ: 独自のメモリアロケータを作成することで、システムのメモリ管理をより細かく制御できます。3. メモリアクセスの最適化キャッシュの利用: CPUキャッシュを意識したメモリアクセスを行うことで、パフォーマンスを大幅に向上させることができます。データの配置: 関連するデータを近くに配置することで、キャッシュヒット率を高めることができます。メモリアライメント: データの境界を適切に揃えることで、
0
カバー画像

C++とC#間でのデータ連携

C#(WPF)アプリケーションの出力結果を、C++アプリケーションにて直接受け取り処理を行う連携に関して、相談を受け実装を行いました。連携方法は共有メモリやソケット、ファイルを利用する方法など複数ありますが、今回はソケットを利用した方法で行いました。実装自体は2時間弱で終わり、連携の挙動にも満足いただけました。上記のような機能も下記の相談より受け付けていますので、ご相談ください。
0
5 件中 1 - 5