gpt4 book ai didi

c++ - 删除在对象构建期间创建的对象?

转载 作者:行者123 更新时间:2023-12-02 10:00:23 25 4
gpt4 key购买 nike

如果在像这样的类的构造过程中创建了对象:

class MyClass
{
private:
std::vector < MyObject*> MyObjects = { new MyObject };
...
在析构函数期间是否需要删除 vector 中的对象?

最佳答案

是的,std::vector < MyObject*> MyObjects包含指向对象的指针。 vector 假定它不拥有对象,因此默认情况下不会删除它们。
如果要自动销毁对象,请更改类型:

std::vector <std::unique_ptr<MyObject>> MyObjects
或者,删除以下位置的所有指针:
  • 析构函数
  • 赋值运算符
  • 在构造函数中,如果发生异常。如果有异常(exception),则未经处理, vector 的一部分将被对象填充。由于异常,除非明确处理,否则指针不会被删除。

  • 通常,首选 std::unique_ptr是首选解决方案,因为它可以确保释放内存。但这是以没有默认分配/复制构造函数为代价的。您要么没有分配/复制就活着,要么仅停留在移动语义上,要么必须明确定义分配/复制。但这并不是一个大代价,因为使用简单的指针,您仍然必须定义赋值/复制。

    关于c++ - 删除在对象构建期间创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62857762/

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