返回unique_ptr<T> .概念澄清

Returning a unique_ptr<T> . Concept clarification

本文关键字:gt ptr unique lt 返回      更新时间:2023-10-16

在阅读boost unique_ptr和这个链接时,它指出这样的指针不能复制,我理解,但是它指出这样的指针可以从函数返回。这在我脑海中提出了一个问题,当从函数返回某些东西时(不是作为引用或指针),复制构造函数被调用。那么,这是否意味着唯一的ptr不能与赋值操作符一起工作,而是与复制构造函数一起工作(这样一次只有ptr指向对象)?它是否比boost shared_ptr具有更少的开销?我使用VS2010

当从函数返回某物(不是引用或指针)时,调用复制构造函数。[…]

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

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

也有更少的开销比boost一个shared_ptr ?

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