在阅读有关boost unique_ptr及其link的内容时,它指出无法复制这样的指针,但是我知道这样的指针可以从函数返回。当我从一个函数(而不是作为引用或指针)返回一些函数时,这引发了一个问题。复制构造函数被调用。这是否意味着唯一的ptr不能与赋值运算符一起使用并使用复制构造函数(这样只有ptr一次指向一个对象)它是否比增强shared_ptr更少的开销?我正在使用VS2010
答案 0 :(得分:13)
当从函数返回某些内容(而不是作为引用或指针)时,将调用复制构造函数。 [...]
不一定。在C ++ 11中,只有在移动构造函数不存在时才会选择复制构造函数。在没有移动构造函数的情况下,通常移动(例如,从函数返回值)会衰减到副本。
unique_ptr
有一个移动构造函数,这意味着可以通过函数的值返回unique_ptr
。
它也比启动shared_ptr的开销少吗?
这是一个无关紧要的问题,但是,确实有较少的开销。实际上,unique_ptr
被设计为原始指针的零开销 RAII包装器,实现了唯一的所有权。使用unique_ptr
不会导致性能方面的任何损失,也不会因使用原始指针而导致内存消耗。