誤奇怪的結果,我寫的東西愚蠢,這讓我吃驚的工作。對象的創建和綁定
class A
{ public:
void print()
{
std::cout << "You can't/won't see me !!!" << std::endl;
}
A* get_me_the_current_object()
{
return this;
}
};
int main()
{
A* abc = dynamic_cast<A*>(abc);
abc->print();
}
這裏,A* abc = dynamic_cast<A*>(abc)
,我正在做一個指針,它沒有聲明dynamic_cast。但是,它的工作原理,所以我認爲上述聲明破壞爲:
A* abc;
abc = dynamic_cast<A*>(abc);
因此,它的工作原理。然而,在嘗試一些更奇怪的場景,如:
A* abc;
abc->print();
,並進一步
A* abc = abc->get_me_the_current_object();
abc->print();
我大吃一驚,看着這些例子是如何工作的以及映射完成。
有人可以請詳細說明這些如何工作?提前致謝。
反問:你爲什麼要這樣做? – leemes 2013-03-06 14:41:34
這是未定義的行爲。 – juanchopanza 2013-03-06 14:43:08
如果'print()'是虛擬的,那麼調用它會嘗試解除引用'abc',然後*然後*幾乎肯定會崩潰。 – 2013-03-06 14:44:53