为什么在使用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 条评论
登录 后参与评论

相关文章

unique_ptr :: release()是否调用析构函数?

unique_ptr 两次调用析构函数

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

为什么来自unique_ptr析构函数的异常会终止程序?

为什么在抛出我的析构函数时没有调用 std::terminate

使用unique_ptr保护的析构函数

unique_ptr析构函数的优势

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

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

在具有受保护的析构函数的类中使用unique_ptr

为什么要为具有非平凡析构函数的类声明constrexpr构造函数(例如unique_ptr,std :: variant)

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

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

为什么数组中的对象的析构函数被另一个替换时没有被调用?

std :: unique_ptr析构函数构造函数顺序

使用std :: map时,包含unique_ptr的结构中的默认析构函数会导致编译错误

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

静态unique_ptr两次调用析构函数

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

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

为什么要调用析构函数

为什么不调用析构函数?

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

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

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

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

为什么带有auto_ptr和显式析构函数的struct无法交换

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

为对象分配值时为什么调用构造函数和析构函数