在阅读有关 boost unique_ptr 和此链接的信息时,它指出无法复制这样的指针,据我所知,但它指出可以从函数返回这样的指针。这在我的脑海中提出了一个问题,当从函数返回某些东西(不是作为引用或指针)调用复制构造函数时。这是否意味着唯一 ptr 不适用于赋值运算符而与复制构造函数一起使用(这样一次只有 ptr 指向一个对象)而且它的开销是否比 boost a shared_ptr 少?我正在使用 VS2010
问问题
506 次
1 回答
13
当从函数(不是作为引用或指针)返回某些内容时,将调用复制构造函数。[...]
不必要。在 C++11 中,仅当不存在移动构造函数时才会选择复制构造函数。在没有移动构造函数的情况下,通常的移动(例如,在从函数返回值时)会衰减为副本。
unique_ptr
有一个移动构造函数,这意味着 aunique_ptr
可以从函数中按值返回。
它的开销是否也比 boost a shared_ptr 少?
这是一个不相关的问题,但是是的,它确实有更少的开销。事实上,unique_ptr
它被设计为实现唯一所有权的原始指针的零开销RAII 包装器。就使用原始指针而言,使用 aunique_ptr
不会导致性能或内存消耗方面的任何损失。
于 2013-06-03T21:06:03.660 回答