我想就学习C++时遇到的这个问题寻求帮助。我尝试将对象直接存储到数组中,但意识到对象立即被解构。我无法弄清楚为什么会这样。
#include <iostream>
class Thing{
public:
~Thing(){
std::cout<<"Thing destructing";
}
};
int main(){
Thing arr[1];
arr[0] = Thing();
int x;
std::cin>>x;
};
最佳答案
在此声明中
arr[0] = Thing();
使用默认的复制赋值运算符,将该表达式 Thing()
创建的临时对象分配给数组的元素。分配后,临时对象将被销毁。
为了更清楚地运行这个演示程序。
#include <iostream>
class Thing
{
public:
~Thing()
{
std::cout<<"Thing " << i << " destructing\n";
}
Thing & operator =( const Thing & )
{
std::cout << "Thing " << i << " assigning\n";
return *this;
}
Thing() : i( ++n )
{
std::cout << "Thing " << i << " constructing\n";
}
private:
size_t i;
static size_t n;
};
size_t Thing::n = 0;
int main()
{
{
Thing arr[1];
arr[0] = Thing();
}
std::cin.get();
return 0;
}
它的输出是
Thing 1 constructing
Thing 2 constructing
Thing 1 assigning
Thing 2 destructing
Thing 1 destructing
关于C++ 如何在数组中存储对象而不删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69886470/