我有一個靜態庫,其中包含我的大部分代碼/對象。我有另一個繼承這些對象的庫:E.G.動態內存跨靜態庫
class SomeClass <-- from base library
class AnotherSomeClass : public SomeClass <--another library
在SomeClass中我有另一個對象SomeObject也是以同樣的方式繼承。
SomeObject *newobject = new AnotherSomeObject(); //for example SomeObject exists in one of the base classes in another library.
我再上溯造型訪問其只存在於子類,像這樣的功能:
AnotherSomeObject *object = (AnotherSomeObject*)newobject;
一切工作正常,除非我釋放內存,這是在基類來完成。我得到了:_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse))
這只是最近出現的很難診斷,因爲它工作正常,直到我對某些類進行了一些更改。
我現在刪除了繼承基類對象的子類對象,然後將基類對象設置爲NULL,而這似乎是工作的。
問題是爲什麼會發生這種情況?
你在基類中有一個虛擬析構函數嗎? –
好吧,使用dynamic_cast <>來代替,這就是它所要做的。破壞堆是否每天都是C++問題。 –
Yochai Timmer - 我只是檢查它期望它是一個虛擬析構函數,並注意到它不是。我希望以這種方式繼承我的其他大部分類。這可能是原因嗎?編譯需要一段時間,所以會回覆你。 – Rebirth