这里究竟发生了什么?我还以为你不能够/应该复制的unique_ptr然而真实的下面的代码编译并运行正常:通过函数创建unique_ptr
std::unique_ptr<SomeObject> CreateObject()
{
return std::unique_ptr<SomeObject>(new SomeObject);
}
// Useage
auto MySomeObject = CreateObject();
上调用此的unique_ptr的移动方法?如果是这样,是否有一种方法可以在函数内实际创建unique_ptr,并在函数作用域退出时不返回对象,而返回它?
我宁愿不返回实际指针,然后把它变成一个unique_ptr,以强制使用此函数返回的对象的unique_ptrs。我也不想仅仅使用shared_ptr来避免这个问题中提出的问题。
这是一个性能非常关键的应用领域,我担心这里可能会产生额外的开销。
它不是复制'unique_ptr',而是**移动它。因此,该对象在“MySomeObject”被销毁之前不会被销毁。另外,如果上述情况产生任何开销,我会感到惊讶,因为RVO很可能会确保“MySomeObject”被直接初始化,而无需调用任何move-ctor。 – 2014-08-28 10:30:35
谢谢,这里绝对让我放心。我希望你已经发布作为答案,所以我可以接受它。 – KKlouzal 2014-08-28 10:37:23
这是之前被问过的,但我无法找到以前的实例。 – 2014-08-28 10:46:00