下面的代碼創建一個雙指針B**
到B*
。它會使用該指針的另一個指針將指向創建B
實例分配內存時start()
叫做:調用從析構函數中刪除會導致堆棧溢出?
class A
:
class A
{
public:
A()
{
fb = new B*;
*fb = NULL;
}
~A()
{
if(*fb)
delete *fb;
delete fb;
}
B** getfb()
{
return fb;
}
private:
B** fb;
};
class B
:
class B
{
public:
B()
{
B** fb = a->getfb();
*fb = this;
}
~B()
{
B** fb = a->getfb();
delete *fb; // <--- stack overflow
*fb = NULL;
}
private:
A* a;
};
start()
(一成員函數class C
):
void C::start()
{
B** fb = a->getfb(); // 'a' is a pointer to an 'A' instance
if(*fb == NULL)
B* f = new B;
}
所以,每當我打電話start()
,然後打電話~B()
,我得到一個堆棧溢出!
第一個問題:你知道什麼'delete'呢? –
我認爲recurssion只發生在析構函數 – Jonas
'exit'被遊戲結束時調用exit()時發生。基本上,它之後沒有任何東西(呃,......)被調用。 –