std::unique_ptr 与数组指针

std::unique_ptr with array pointer

本文关键字:数组 指针 unique std ptr      更新时间:2023-10-16

这安全吗?

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

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

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

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

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

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

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

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

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