gpt4 book ai didi

c++ - 通过函数创建 unique_ptr

转载 作者:行者123 更新时间:2023-11-30 02:44:07 30 4
gpt4 key购买 nike

这里到底发生了什么?我认为您不能/不应该复制 unique_ptr,但是以下代码可以正确编译和运行:

std::unique_ptr<SomeObject> CreateObject()
{
return std::unique_ptr<SomeObject>(new SomeObject);
}

// Useage
auto MySomeObject = CreateObject();

是否调用了 unique_ptr 的 move 方法?如果是这样,有没有一种方法可以在函数内部实际创建 unique_ptr 并返回它,而不会在函数作用域退出时销毁对象?

我宁愿不返回实际的指针,然后将它变成一个 unique_ptr,以强制对这个函数返回的对象使用 unique_ptr。我也不想只使用 shared_ptr 来避免这个问题中提出的问题。

这是应用程序的一个非常关键的性能区域,我担心这里可能会产生额外的开销。

最佳答案

I thought you weren't able/supposed to copy unique_ptr's

确实不能。但是您可以移动它们,将托管对象的所有权从一个智能指针转移到另一个智能指针。

Is the unique_ptr's move method being invoked?

是的。如果可能的话,函数的返回值会被移动;临时返回值的赋值也是通过移动完成的。

is there a way to actually create the unique_ptr inside the function and return it without the object getting destroyed when the function scope exits?

是的,这正是这里发生的事情。移动 unique_ptr 转移管理对象的所有权;所以在这里,所有权从返回表达式的临时值移动到返回值,再到 MySomeObject。 (在实践中,第一步将被省略;但效果是一样的)。

This is a very performance critical area of the application and I'm afraid extra overhead may be created here.

移动 unique_ptr 与复制原始指针的额外开销是:

  • 指针移动时清零;
  • 检查指针被销毁时是否删除一个对象。

这些都不太可能很重要,尤其是与的成本相比时。

关于c++ - 通过函数创建 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25546515/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com