[過去ログ] Visual Studio 2022 Part2 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
562: (オイコラミネオ MM53-mFyV) 2023/04/03(月)01:20 ID:F+wcgPcDM(1) AAS
すれ違いかも知れませんが、VS2005 (SP1)でdelete 文に関する不具合を発見しました。
CWnd を継承した CAaa クラスに(仮想)デストラクタが定義されている場合に、
CAaa *pAaa = new CAaa と定義した pAaa を delete pAaa とすると、
当然 CAaa のデストラクタが呼び出されます。
しかし、それは、class CAaa : public CWnd {・・・}; が定義されたヘッダファイル
Aaa.h を #include した場合です。
class CAaa; とだけ書いて Aaa.h を #include しないと、本来なら
delete pAaa の部分でコンパイルエラーになるはずなのに、エラーにならずに
コンパイルされてしまいます。なお、new CAaa の部分は同じソースファイルには書かれて
いないので、CAaa の完全定義が無くてもその部分ではコンパイルエラーにはなりません。
new CAaa を書いている別のソースコードでは、aaa.h を #include しています。
さて、この状態でデバッガに入って、delete pAaa の部分を、逆アセンブルしてみると、デストラクタが
呼び出されずに free_dbg() のような関数だけが直接呼び出されていました。
同じソースコードに、#include "Aaa.h" を追加しておくと、ちゃんと、同じ部分が
仮想デストラクタが呼び出すこーどになることを確認しています。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s