我有下面这个程序,我通过引用函数 myFunc
传递一个 vector ,在这个函数中,我向 vector 添加了几个元素。
我没有释放用 new 创建的对象,现在忽略由此导致的内存泄漏。
myFunc()
执行完成后,我正在打印变量 ctor 和 dtor
知道构造函数和析构函数被调用了多少次。
输出是:
Before Exiting 5 7
我正在创建 5 个对象,所以 ctor
是 5
。但是为什么 dtor
7
呢?额外的两个从哪里算起?我错过了什么吗?
#include
#include
using namespace std;
static int ctor = 0;
static int dtor = 0;
class MyClass
{
public:
MyClass(int n)
{
i = n;
ctor++;
// cout << "Myclass ctor " << ctor << endl;
}
~MyClass()
{
dtor++;
// cout << "Myclass dtor" << dtor << endl;
}
private:
int i;
};
void myFunc(vector<MyClass> &m);
void myFunc(vector<MyClass> &m)
{
MyClass *mc;
for(int i = 0; i < 5; i++)
{
mc = new MyClass(i);
m.push_back(*mc);
}
}
int main()
{
vector<MyClass> m;
vector<MyClass>::iterator it;
myFunc(m);
cout << "Before Exiting " << ctor << " " << dtor << endl;
}
最佳答案
vector 围绕对象进行复制,但只有您的 int
构造函数递增 ctor
。这不考虑复制构造的对象,因为您没有提供,编译器会为您提供。
添加
MyClass(const MyClass& rhs) i(rhs.i) { ++ctor; }
到你的类(class)看看这是否平衡。
关于c++ - 析构查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7287953/