試圖在C更深入的遺傳機理分析 ++我偶然發現了下面的例子: #include<iostream>
using namespace std;
class Base {
public:
virtual void f(){
cout << "Base.f" << endl;
}
};
class Left : public virtual Base {
我正在編輯這個問題,以使其更具可讀性和較少人爲操作。我已經設法用下面的一小段代碼來複制我的問題。那麼問題是:爲什麼這會在~A()中的「delete p」行上的_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)斷言失敗? class A;
class I
{
public:
I(const A *p) : parent_(p) {}
virt
如果我有像 class Base1 {};
class Base2 {};
class Derived : public Base1, public Base2 {};
然後構造函數調用對製作的派生類對象順序 Base1
Base2
即他們的順序出現在 class Derived : public Base1, public Base2 {};
但如果我將其更改爲 類Deri
class foo : public virtual bar, public virtual kung
{
// implementation of the method of the above inherited class
};
酒吧和功夫類是包含在foo的CLAS的內部實現純虛方法的抽象類.. 什麼用的呢?
我試圖更好地理解虛擬繼承在實際中如何工作(即,不是按照標準,而是在像g++這樣的實際實現中)。真正的問題在底部,用粗體表達。 所以,我給自己建一個繼承圖,其中有除其他事項外,這些簡單類型: struct A {
unsigned a;
unsigned long long u;
A() : a(0xAAAAAAAA), u(0x1111111111111111ull)