[過去ログ]
Visual Studio 2022 Part2 (1002レス)
Visual Studio 2022 Part2 http://mevius.5ch.net/test/read.cgi/tech/1657709270/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
562: デフォルトの名無しさん (オイコラミネオ MM53-mFyV) [sage] 2023/04/03(月) 01:20:22.46 ID:F+wcgPcDM すれ違いかも知れませんが、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" を追加しておくと、ちゃんと、同じ部分が 仮想デストラクタが呼び出すこーどになることを確認しています。 http://mevius.5ch.net/test/read.cgi/tech/1657709270/562
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.045s