我收到了要使用其頭的第三方庫。現在這個圖書館有一個班級'基地'。這個類的問題是它沒有虛擬析構函數。現在因爲我沒有和我一起的第三方代碼,我不能在那裏做改變。在第三方軟件中導出沒有虛擬析構函數的類
我被告知用這個編寫幾個派生類,並確保在刪除對象時正確清理對象。我們怎樣才能做到這一點?
感謝您的回覆,看起來像我只有2個選項。
1)把虛擬析構函數放在派生類中 2)使用合成。
我打算採取辦法沒有1.我打算有虛擬析構函數的包裝派生類。然後使用這個包裝派生類來進一步推導。以下是代碼。
//++ THIRD PARTY HEADER
class base
{
public:
~base(){ }
};
//-- THIRD PARTY HEADER
//++ MY CODE
// wrapper polymorphic base.
class polymorphic_base
{
public:
virtual ~polymorphic_base() { }
};
class derived1 : polymorphic_base
{
/// derived 1
};
class derived2 : polymorphic_base
{
/// derived 2
}
void foo(polymorphic_base *pb)
{
// use pb
// use pb
delete pb;
}
//-- MY CODE
請讓我知道,如果這種方法應該罰款?
通常,你運氣不好:如果他們沒有虛擬析構函數,通常意味着庫的作者不希望你從他們的類中派生出來。無論如何,爲什麼你需要派生(比如說,包括一個實例作爲數據成員?) – dasblinkenlight
只需檢查:你是否證實'Base'本身並不是可能派生自某個超級基礎,它具有析構函數定義爲虛擬? – jogojapan
誰刪除實例? – Yakk