我有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);
}
答案 0 :(得分:0)
前两个选项主要是编程风格的问题。我发现第一个更清晰,更容易阅读。
另外两个例子是完全错误的。不能正常工作,因为您返回对临时或临时指针的引用。两者都会打破你的计划。
答案 1 :(得分:0)
我会使用make_shared转移所有权:
std::shared_ptr<Y> func()
{
return std::make_shared<B>();
}