gpt4 book ai didi

C++ 基本构造函数/vector 问题(1 个构造函数,2 个析构函数)

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:00 25 4
gpt4 key购买 nike

问题可能很基本,但无法找出问题所在(这会导致我的应用程序出现大量内存泄漏):

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();
  1. 为什么有 2 个析构函数?
  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com