2
我發現這個類定義(T
具有TBase
派生), passResponsabilityToBarDestructor
不是 功能的實際名稱,可悲。委託對象破壞
template<typename T>
class Foo
{
public:
Foo(const std::string& aName, Bar& aBar)
{
const TBase* myObj = static_cast<const TBase*>(new T);
NiceNameSpace::passResponsabilityToBarDestructor(aName, myObj, aBar);
}
virtual ~Foo() {}
};
我想知道它是否設計得很好。 當我寫班,我傾向於避免委託破壞,因爲我不知道委託類(在這種情況下,欄)是否將被修改 不知道的事實passResponsabilityToBarDestructor
必須呼籲 成員功能aBar
保存指針myObj
某處並刪除它 當myObj
被破壞。
我想知道:
- 如果這個類精心設計的
- 如果我的設計工作(當我不能使用智能指針我頭疼試圖 寫類在同一個班摧毀的東西構建它)浪費時間。
如果'T'來自'TBase',則不需要顯式強制轉換:'const TBase * myObj = new T;' – dyp
@DyP謝謝!實際上,我驗證了代碼的用戶使用T的只有來自TBase的類,但也許代碼的作者想要更通用。誰知道... – jimifiki
如果一個類被記錄爲提供服務(在這種情況下是對象刪除服務),請使用它。如果不是,不要。就這麼簡單。 –