在阅读有关 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/