共享指针返回和对象寿命

shared pointer return and object lifetime

本文关键字:对象 指针 返回 共享      更新时间:2023-10-16

我有A类和B

class A{};
class B {
   private:
      shared_ptr<A> spa;
   public:
      B() {
         //init spa
      }
   //...
};

我应该这样做:

shared_ptr<B> func() {
   //....
   return shared_ptr<B>(new B);
}

或最好做:

B* func(){return new B;}
shared_ptr<B> caller=shared_ptr<B>(func());

另外,返回对共享_ptr的引用更有意义:

shared_ptr<B>& func() {
   //....
   return shared_ptr<B>(new B);
}

或指向共享_ptr的指针

shared_ptr<B>* func() {
   //....
   return &shared_ptr<B>(new B);
}

前两个选项主要是编程样式的问题。我发现第一个更清晰,更易于阅读。

其他两个例子是错误的。不起作用,因为您返回对临时临时或指针的引用。两者都会打破您的程序。

我将使用make_shared转移所有权:

std::shared_ptr<Y> func()
{
    return std::make_shared<B>();
}