今日、私はc ++デストラクタについて疑問に思っていたので、小さなテストプログラムを作成しました。それは私の最初の質問に答えましたが、次のような新しい質問を提起しました:
次のプログラム:
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
class test
{
public:
int id;
vector<test> collection;
test(){}
test(int id_in){id = id_in;}
~test(){cout << "dying: " << id << "\n";}
};
int _tmain(int argc, _TCHAR* argv[])
{
{
test obj(1);
obj.collection.push_back(test(2));
obj.collection.push_back(test(3));
cout << "before overwrite\n";
obj = test(4);
cout << "before scope exit\n";
}
int x;
cin >> x;
}
次の出力を生成します。
dying: 2
dying: 2
dying: 3
before overwrite
dying: 2
dying: 3
dying: 4
before scope exit
dying: 4
ID 1のテストオブジェクトのデストラクタが表示されないのはなぜですか?上書きされたときにそのデストラクタが呼び出されない場合、そのベクトル内のインスタンスのデストラクタを呼び出すのは何ですか?