问题可能很基本,但无法找出问题所在(这会导致我的应用程序出现大量内存泄漏):
class MyClass {
public:
MyClass() { cout << "constructor();\n"; };
MyClass operator= (const MyClass& b){
cout << "operator=;\n"; return MyClass();
};
~MyClass() { cout << "destructor();\n"; };
};
main() {
cout << "1\n";
vector<MyClass> a;
cout << "2\n";
MyClass b;
cout << "3\n";
a.push_back(b);
cout << "4\n";
}
输出是:
1
2
constructor();
3
4
destructor();
destructor();
- 为什么有 2 个析构函数?
- 如果是因为创建了一个拷贝以插入 vector - 为什么从未调用“operator=”?
最佳答案
当 b 对象被插入 vector 时,会创建一个拷贝,但不是通过您拥有的 operator=()
- 使用编译器生成的复制构造函数。
当 main() 超出范围时,b
对象被销毁,vector 中的拷贝也被销毁。
添加显式复制构造函数可以看到:
MyClass( MyClass const& other) {
cout << "copy ctor\n";
};
关于C++ 基本构造函数/vector 问题(1 个构造函数,2 个析构函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/992435/