2012-06-26 4 views
7

このシンボルはコンパイラによって生成されたデストラクタのようです。これは「コンパイラ生成デストラクタ」と「スカラー削除デストラクタ」の違いは何ですか?他のタイプのコンパイラで生成されたctor/dtorはありますか?VC++のシンボル「ベクトル削除デストラクタ」の意味は?

+0

として

void scalar_deleting_destructor(A* pa) { pa->~A(); A::operator delete(pa); } 

、後者のように疑似コードで表現することができますか? – Liviu

答えて

8

'scalar deleting destructor'および'vector deleting destructor'という名前の関数は、deleteステートメントのコードを生成するときにVCコンパイラによって作成されるヘルパー関数です。コンパイラによって生成されるクラスデストラクタとそれらを混同しないでください。 前者はなぜあなたはanwserを受け入れない

void vector_deleting_destructor(A* pa, size_t count) 
{ 
for (size_t i = 0; i < count; ++i) 
pa[i].~A(); 
A::operator delete[](pa); 
} 
+1

ありがとう、アンドレイ。私はここで内部の削除演算子について少し混乱しています。このスカラー削除デストラクタはコンパイラによって生成され、 'delete a'によって呼び出されます。これは正しいですか?原因の再帰を削除するための内部呼び出しがありますか? – Thomson

+3

@Thomsonもっと明確にしよう。 'delete a'は* delete文*です。つまり、実際にメモリを解放する関数である' delete operator * 'である 'A :: operator delete'と混同しないでください。現在私はC++標準を持っていないので、少し後でリファレンスを提供することができます。 – Andrey

関連する問題