为什么在使用unique_ptr时没有调用析构函数?

埃里克·努罗扬(Erik Nouroyan)

在这里,我正在创建动态分配的S对象数组,我希望它们被unique_ptr销毁,这不会发生,并且会出现此错误

命令被信号11终止

这意味着该程序访问了就我而言本不应该访问的内存。

#include <iostream>
#include <memory>

class S{
    public:
        S(){std::cout<<"Constructor\n";}
        ~S(){std::cout<<"Destructor\n";}
};

int main() {
    S* arr=new S[4];
    {
        using namespace std;
        unique_ptr<S> ptr=unique_ptr<S>(arr);
    }
}
卡米尔库克
new s[4]

如果你使用new[]的分配必须使用去破坏它delete[],不是delete

    auto ptr = unique_ptr<S[]>(arr);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我可以在析构函数中销毁对象时,为什么还要使用std :: unique_ptr?

来自分类Dev

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

来自分类Dev

unique_ptr析构函数的优势

来自分类Dev

如果A有析构函数,std :: unique_ptr <A>什么时候需要特殊的删除器?

来自分类Dev

当基类具有受保护的析构函数时,创建unique_ptr <Base>

来自分类Dev

使用std :: unique_ptr的带有私有析构函数的Singleton

来自分类Dev

为什么push_back在包含unique_ptr的结构上成功,除非该结构具有自定义析构函数?

来自分类Dev

如何允许std :: unique_ptr访问类的私有析构函数或使用私有析构函数实现C ++工厂类?

来自分类Dev

为什么通过添加空的析构函数来修复“错误:使用unique_ptr将'sizeof'无效应用到不完整类型”的问题?

来自分类Dev

thread_local std :: unique_ptr版本未调用析构函数

来自分类Dev

具有unique_ptr成员和自定义析构函数的对象的向量

来自分类Dev

为什么在使用赋值时不调用析构函数的堆栈变量?

来自分类Dev

std :: unique_ptr的自定义删除程序是否是手动调用析构函数的有效位置?

来自分类Dev

为什么在移动Unique_ptr时在lambda中调用复制构造函数?

来自分类Dev

为什么std :: shared_ptr两次调用我的析构函数?

来自分类Dev

具有显式析构函数和std :: unique_ptr <>成员的类不能在std :: vector <>中使用吗?

来自分类Dev

为什么std :: shared_ptr从基类和派生类中调用析构函数,而delete仅从基类中调用析构函数?

来自分类Dev

为什么在调用luaL_error时未调用C ++对象析构函数?

来自分类Dev

当对象绑定到成员函数时,为什么std :: function会调用析构函数?

来自分类Dev

当对象绑定到成员函数时,为什么std :: function会调用析构函数?

来自分类Dev

为什么析构函数比构造函数调用得更多?

来自分类Dev

为什么在Friend函数中调用析构函数

来自分类Dev

如果析构函数被删除,为什么要调用它,而如果没有删除,为什么不调用它呢?

来自分类Dev

C#,删除带有子线程的对象时,GC没有调用析构函数

来自分类Dev

为什么没有使用[[nodiscard]]定义unique_ptr :: release?

来自分类Dev

当我单击控制台上的关闭按钮时,为什么不调用析构函数?

来自分类Dev

为什么在插入析构函数时总是得到“在抛出...实例后终止调用”?

来自分类Dev

为什么在声明指向对象的指针时不调用析构函数

来自分类Dev

如果未使用shared_ptr定义虚拟析构函数,有什么好处?

Related 相关文章

  1. 1

    当我可以在析构函数中销毁对象时,为什么还要使用std :: unique_ptr?

  2. 2

    当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

  3. 3

    unique_ptr析构函数的优势

  4. 4

    如果A有析构函数,std :: unique_ptr <A>什么时候需要特殊的删除器?

  5. 5

    当基类具有受保护的析构函数时,创建unique_ptr <Base>

  6. 6

    使用std :: unique_ptr的带有私有析构函数的Singleton

  7. 7

    为什么push_back在包含unique_ptr的结构上成功,除非该结构具有自定义析构函数?

  8. 8

    如何允许std :: unique_ptr访问类的私有析构函数或使用私有析构函数实现C ++工厂类?

  9. 9

    为什么通过添加空的析构函数来修复“错误:使用unique_ptr将'sizeof'无效应用到不完整类型”的问题?

  10. 10

    thread_local std :: unique_ptr版本未调用析构函数

  11. 11

    具有unique_ptr成员和自定义析构函数的对象的向量

  12. 12

    为什么在使用赋值时不调用析构函数的堆栈变量?

  13. 13

    std :: unique_ptr的自定义删除程序是否是手动调用析构函数的有效位置?

  14. 14

    为什么在移动Unique_ptr时在lambda中调用复制构造函数?

  15. 15

    为什么std :: shared_ptr两次调用我的析构函数?

  16. 16

    具有显式析构函数和std :: unique_ptr <>成员的类不能在std :: vector <>中使用吗?

  17. 17

    为什么std :: shared_ptr从基类和派生类中调用析构函数,而delete仅从基类中调用析构函数?

  18. 18

    为什么在调用luaL_error时未调用C ++对象析构函数?

  19. 19

    当对象绑定到成员函数时,为什么std :: function会调用析构函数?

  20. 20

    当对象绑定到成员函数时,为什么std :: function会调用析构函数?

  21. 21

    为什么析构函数比构造函数调用得更多?

  22. 22

    为什么在Friend函数中调用析构函数

  23. 23

    如果析构函数被删除,为什么要调用它,而如果没有删除,为什么不调用它呢?

  24. 24

    C#,删除带有子线程的对象时,GC没有调用析构函数

  25. 25

    为什么没有使用[[nodiscard]]定义unique_ptr :: release?

  26. 26

    当我单击控制台上的关闭按钮时,为什么不调用析构函数?

  27. 27

    为什么在插入析构函数时总是得到“在抛出...实例后终止调用”?

  28. 28

    为什么在声明指向对象的指针时不调用析构函数

  29. 29

    如果未使用shared_ptr定义虚拟析构函数,有什么好处?

热门标签

归档