【问题标题】:std::unique_ptr with array pointer带有数组指针的 std::unique_ptr
【发布时间】:2014-03-31 08:56:54
【问题描述】:

这样安全吗?

std::unique_ptr<A> ptr(new A[100]);

ptr超出范围并调用其析构函数时,它会错误地delete指针,还是delete[]它?

【问题讨论】:

    标签: c++ pointers stl


    【解决方案1】:

    您必须正确指定 unique_ptr 将持有的类型才能正常工作:

    std::unique_ptr<A[]> ptr(new A[100]);
    

    这将默认为使用delete[] 而不是delete 的删除器。

    【讨论】:

      【解决方案2】:

      如果您正确地将指向的类型指定为A[],它将正确地指定delete[] 指针,因为unique_ptr 的模板专门用于数组类型。

      请注意,如果可以自动推断类型,您将不会有机会在这里出错。这将要求产生指针的表达式是一个函数调用(与std::make_pair 相同),如下所示:

      auto ptr = make_unique(new A[100]);
      

      这是 C++11 中缺少的有用实用程序,但已添加到 C++14 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 2013-08-18
        相关资源
        最近更新 更多