C++ virtual繼承

        C++ virtual繼承的另一種名稱是菱形繼承,主要目的是用於解決從不同類繼承來的同名數據成員在內存中有不同的拷貝,造成數據不統一的問題,以致於在進行類釋放時造成內存泄漏。將共同的基類作爲虛基類,這時從不同的路徑繼承過來的同名數據成員在內存中就只有一個拷貝,同一個函數名也只有一個映射。這樣不僅就解決了二義性問題,也節省了內存,避免了數據不一致的問題。
如下是實現格式:

class 派生類名:virtual 繼承方式  基類名   //virtual是關鍵字,聲明該基類爲派生類的虛基類。

在多繼承情況下,虛基類關鍵字的作用範圍和繼承方式關鍵字相同,只對緊跟其後的基類起作用。聲明瞭虛基類之後,虛基類在進一步派生過程中始終和派生類一起,維護同一個基類子對象的拷貝。由於懶畫圖引用別人的一個,請大家原諒,謝謝理解:

class CBase
{
public:
    CBase(unsigned int len) : m_buffer(0)
    {
       if(len > 0)
       {
           m_buffer = new char[len];
       } 
    }

    ~CBase
    {
       if(NULL != m_buffer)
       {
          delete [] m_buffer;
          m_buffer = NULL;
       }
    }

private:
    char* m_buffer;
};
class Test1 : public virtual CBase
{
public:
//...
};

class Test2 : public virtual CBase
{
public:
//...
};

class Test3 : public Test1, public Test2
{
public:
//...
};
如果沒有虛繼承則在對象釋放時m_buffer會進行兩次釋放。
發佈了109 篇原創文章 · 獲贊 29 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章