c++ - 数组和普通指针与 std::unique_ptr 的区别

标签 c++ visual-studio-2010 c++11

有:

std::unique_ptr< double> d( new double[3] );

std::unique_ptr< double[]> darr( new double[3] );

至少两者之间的区别之一似乎是后面的调用 delete[] 但两者都是有效的..但是怎么会呢?我的意思是在第一种情况下内存是如何删除的,这不是使用 delete 删除数组的未定义行为吗?

其次,我知道上面的 darr 定义了 [] 运算符,但是如何访问 d 的第二和第三个成员,因为没有 [] 运算符定义。

为什么有人会使用第一种语法而不是第二种语法?

最佳答案

std::unique_ptr :

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/

相关文章:

c++ - 我可以将VB代码转换为C++代码吗

c++ - 成员函数erase()不在循环中工作

c++ - 尝试制作 shared_ptr 时 std::make_shared() 出错?

c++ - 关于模板类特化的范例

c++ - 如何使用 inplace const char* 作为 std::string 内容

c++ - 如何显示具有相同信息的多个项目?

c++ 2 dim数组中每一行的列有1s

c++ - Visual Studio 2010 SP1 中的断言和未使用的变量

c# - 在 visual studio 中自动完成时自动添加 'this' 标识符

C++ 入口点 -> main()