今天我想知道 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 的测试对象的析构函数?如果它的析构函数在被覆盖时没有被调用,那么在它的向量中调用实例的析构函数是什么?