共享指针返回和对象生存期

时间:2015-05-17 16:54:09

标签: c++

我有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());

另外,更有意义的是返回对shared_ptr的引用,如:

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

或指向shared_ptr的指针

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

2 个答案:

答案 0 :(得分:0)

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

另外两个例子是完全错误的。不能正常工作,因为您返回对临时或临时指针的引用。两者都会打破你的计划。

答案 1 :(得分:0)

我会使用make_shared转移所有权:

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