這是我在這個網站的第一個問題,可以隨意突出與我的字的選擇,問題結構等的dynamic_cast和多態性
最近出現任何問題,我開始與多態性處理時使用dynamic_cast
,和我已經讀取dynamic_cast
不會創建該類的另一個實例,而是創建另一個指向該對象的指針實例。
在測試dynamic_cast
時,我遇到了這個問題。下面是代碼:
//main.cpp
#include <iostream>
class Base{
public:
int BaseNum;
virtual void BaseFunction(){};
};
class Derived : public Base{
public:
int DerivedNum;
virtual void DerivedFunction(){};
};
int main(){
Base * ptrBase = new Base;
ptrBase->BaseNum = 0;
Derived * ptrDerived = dynamic_cast<Derived *>(ptrBase);
ptrDerived->DerivedNum = 1;
std::cout << ptrBase->BaseNum << ptrDerived->DerivedNum << std::endl;
system("pause");
return 0;
}
程序在該行崩潰:
ptrDerived->DerivedNum = 1;
調試時,它說:「無法讀取內存」。我的結論是,如果原始內存分配是爲層次結構中較高的類保留的,我不能沮喪,但我認爲我可能是錯的。
代碼出錯了?
感謝澄清,所以基本上dynamic_cast不會添加任何內存分配。 – Ediac
沒有分配,只是一個指向現有對象內不同內存地址的指針。 –
@DiegoLiu:'dynamic_cast'說:「嘿,看看這是不是派生的,如果是的話,給我一個指向它那邊的指針 –