c++ - 返回一个 unique_ptr<T> 。概念澄清

标签 c++ boost c++11 copy-constructor unique-ptr

在阅读有关 boost unique_ptr 的内容时,在这 link 上它指出不能复制这样的指针,据我所知,但是它指出可以从函数返回这样的指针。这在我脑海中提出了一个问题,当从函数返回某些东西(不是作为引用或指针)时,复制构造函数被调用。这是否意味着 unique ptr 不与赋值运算符一起工作而与复制构造函数一起工作(这样一次只有 ptr 指向一个对象)而且它的开销是否比 boost a shared_ptr 少?我正在使用 VS2010

最佳答案

when something is returned from a function (not as a reference or a pointer) the copy constructor is called. [...]

不一定。在 C++11 中,只有当 移动构造函数 不存在时,才会选择复制构造函数。在没有移动构造函数的情况下,通常是移动(例如,从函数返回值时)会衰减为拷贝。

unique_ptr 有一个移动构造函数,这意味着 unique_ptr 可以通过函数的值返回。

Also does it have less of an overhead than boost a shared_ptr ?

这是一个不相关的问题,但是是的,它确实有更少的开销。事实上,unique_ptr 被设计为实现唯一所有权的原始指针的零开销 RAII 包装器。使用 unique_ptr 不会导致任何性能损失,也不会导致与使用原始指针相关的内存消耗方面的损失。

关于c++ - 返回一个 unique_ptr<T> 。概念澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905811/

相关文章:

c++ - std::unordered_set 的元素的迭代顺序是否保证始终相同?

c++ - DirectX Z 缓冲区无法正常工作

c++ - 用于在 vulkan 中渲染的辅助命令缓冲区

c++ - 从 shared_ptr 中分离一个指针?

c++ - 使用 boost 库收听 udp 广播

c++ - 当键可能不存在时,如何返回对对象的引用(来自 unordered_map)?

c++ - 是否缓存了 boost multi_index 提取的键?

php - 帮助将 C++ 移植到 PHP 代码

c++ - 如何创建 std::string 包装器,将 ptr 保留到 std::string 并将 ptr 保留到创建该包装器实例的类中的特殊类函数?

具有抽象基类的子类的 C++ 模板特化