C++ 如何在数组中存储对象而不删除它们

标签 c++ class destructor temporary-objects copy-assignment

我想就学习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/

相关文章:

php - 重新分配 $this 时的有趣行为

python - 为什么类中的print语句在一个对象还没有创建的时候就被执行了?

java - 使用 JNI 从 JMS 调用 C++

c++ - 如果子类具有与父类相同的参数,子类是否应该覆盖构造函数?

r - 为 `+` 定义 data.frame 方法并在 ggplot 对象上使用时,二元运算符的非数字参数

c++ - 是否有可能在构造函数和析构函数之外修改 `vptr`?

c++ - 析构函数的 AVL 树内存问题

C++ 就地析构函数编译警告

c++ - 在 Python 中公开 C++ 全局变量

c++ - 使用 std::ostream 作为类成员