-4
我有類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);
}
這最後的代碼片斷將無法正常工作,你就返回一個指針到一個臨時的。另外,有一個指向共享指針的指針很少有意義。並且不要通過引用返回,該代碼片段返回對臨時值的引用。而是通過值*返回*。智能指針的一個要點是你應該能夠把它們看作*值*,並且它們有適當的操作符和構造函數來處理它們。 –
你的一半代碼甚至不是有效的。請多加註意這個問題。 –