首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >unique_ptr对数组有什么用处吗?

unique_ptr对数组有什么用处吗?
EN

Stack Overflow用户
提问于 2013-05-23 18:35:58
回答 11查看 193.1K关注 0票数 283

std::unique_ptr支持数组,例如:

代码语言:javascript
复制
std::unique_ptr<int[]> p(new int[10]);

但这是必要的吗?也许使用std::vectorstd::array更方便。

你觉得这个结构有什么用处吗?

EN

回答 11

Stack Overflow用户

发布于 2014-07-21 01:19:30

您可能使用unique_ptr的一个原因是,如果您不想支付value-initializing数组的运行时成本。

代码语言:javascript
复制
std::vector<char> vec(1000000); // allocates AND value-initializes 1000000 chars

std::unique_ptr<char[]> p(new char[1000000]); // allocates storage for 1000000 chars

std::vector构造函数和std::vector::resize()将对T进行赋值初始化--但是如果T是一个POD,new就不会这样做。

请参阅Value-Initialized Objects in C++11 and std::vector constructor

注意,在这里vector::reserve不是可选的:Is accessing the raw pointer after std::vector::reserve safe?

这也是C程序员可能会选择malloc而不是calloc的原因。

票数 87
EN

Stack Overflow用户

发布于 2013-05-23 18:40:39

std::vector可以被复制,而unique_ptr<int[]>允许表示对数组的唯一所有权。另一方面,std::array要求在编译时确定大小,这在某些情况下可能是不可能的。

票数 34
EN

Stack Overflow用户

发布于 2015-08-27 02:14:42

std::vectorstd::array相反,std::unique_ptr可以拥有空指针。

当使用需要数组或NULL的C API时,这很方便:

代码语言:javascript
复制
void legacy_func(const int *array_or_null);

void some_func() {    
    std::unique_ptr<int[]> ptr;
    if (some_condition) {
        ptr.reset(new int[10]);
    }

    legacy_func(ptr.get());
}
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16711697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档