有:
std::unique_ptr< double> d( new double[3] );
和
std::unique_ptr< double[]> darr( new double[3] );
至少两者之间的区别之一似乎是后面的调用 delete[]
但两者都是有效的..但是怎么会呢?我的意思是在第一种情况下内存是如何删除的,这不是使用 delete
删除数组的未定义行为吗?
其次,我知道上面的 darr
定义了 []
运算符,但是如何访问 d
的第二和第三个成员,因为没有 []
运算符定义。
为什么有人会使用第一种语法而不是第二种语法?
最佳答案
template <
class T,
class Deleter
> class unique_ptr<T[], Deleter>;
Manages the lifetime of a dynamically-allocated array of objects (e.g. allocated with new[]).
不幸的是,表达式std::unique_ptr<double>(new double[3])
编译时没有警告或错误,最终处理 new[]
用 delete
分配(标量版本)在运行时导致未定义的行为。
您可以使用 std::vector<double>(3)
自动分配和处置数组。
关于c++ - 数组和普通指针与 std::unique_ptr 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26005193/