作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我运行这段代码时,析构函数在对象移除之前启动。
代码在这里:
#include <string>
#include <vector>
using namespace std;
class Testi {
public:
string name;
Testi(string a) : name(a) {
cout << "Im alive: " << name << endl;
}
~Testi() {
cout << "Im no longer alive: " << name << endl;
}
};
int main() {
vector <Testi> a;
a.push_back(Testi("John"));
a.push_back(Testi("Jack"));
a.push_back(Testi("Jake"));
cout << a[1].name;
cin.get();
return 0;
}
当我运行程序输出是:
Im alive: John
Im no longer alive: John
Im alive: Jack
Im no longer alive: John
Im no longer alive: Jack
Im alive: Jake
Im no longer alive: John
Im no longer alive: Jack
Im no longer alive: JakeJack
输入后:
Im no longer alive: John
Im no longer alive: Jack
Im no longer alive: Jake
所以在每次 push_back() 之后,所有的析构函数都会运行。输出操作运行良好,因此对象仍然存在。对于第一个析构函数运行 4 次!为什么?
最佳答案
相关代码如下:
vector <Testi> a;
a.push_back(Testi("John"));
Testi("John")
创建一个新的临时 Testi 对象。push_back
将该对象复制到 vector 中。因此意外的构造函数和析构函数调用来自临时对象的创建和删除。您可以使用 emplace_back
避免额外的临时对象和拷贝,这将直接在 vector 中构造对象。
关于c++ - 为什么析构函数在对象被删除之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41025053/
我是一名优秀的程序员,十分优秀!