gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:05 25 4
gpt4 key购买 nike

有:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com