可以說我有一個多態類結構類似的通smart_pointer來構造VS原始指針
class Base
{
//some implementation
};
class Deriv: public Base
{
//implementation
}
class Case1
{
boost::scoped_ptr<A> a_ //polymorphic data member owned by C
public:
Case1(A* a):a_(a)
{
}
};
class Case2
{
boost::scoped_ptr<A> a_ //polymorphic data member owned by C
public:
Case2(std::auto_ptr<A> a):a_(a.release())
{
}
};
而且我有一個三等功案例1/2擁有上述這些多態對象之一。現在我需要將一個指向Base/Deriv對象的指針傳遞給case1/2類的構造函數,該類取得了該對象的所有權。我是否應該將此對象作爲智能指針傳遞給auto_ptr的,使之清楚,我要拿回這個對象的照顧,或允許原始指針(案例1)允許一個更簡單的語法像
Case1 c(new Deriv);
//compared to
Case2 c(std::auto_ptr<Base>(new Deriv));
你的意思是在中間發生的完全零代碼?我也不明白爲什麼它不能是暫時的。 – Puppy 2011-01-20 21:16:23
@DeadMG:零碼在哪裏?如果`Case1`構造函數在將原始指針參數分配給智能指針之前做了任何可能會引發異常的事件,則該對象將被泄漏。我已經添加了一個關於Herb Sutter的GOTW文章的鏈接。如果構造函數只有一個參數,這不是問題,但即便如此,大多數良好的編碼風格(包括Boost指南)都建議爲此指定所有智能指針。 – 2011-01-20 21:17:04