[問題] class的記憶體宣告問題

作者: kdok123 (小天)   2014-09-21 19:22:32
不好意思我是C++新手...
有個class長這樣
class test{
public:
test();
~test();
private:
test *node;
};
test::test()
{
node = new test;
}
test::~test()
{
free(node);
}
int main()
{
test *head = new test;//這個地方就爆掉了
return 0;
}
大概跑了一次知道是constructor裡不能再new了,不過為什麼呢?
我只是想要把物件指標head裡的node給定一個new的空間而已呀?
大概有想過應該是我外面new了一個test的容量
可是裡面又要new一個test,這樣雙倍的test他會吃不消
所以我又試了
test *head = new test[2];
但還是不行
最後是把constructor拿掉,把test *node宣告成public
從main裡用物件去申請node的空間才行
想請問這中間的空間分配問題出在哪裡了??
作者: bibo9901 (function(){})()   2014-09-21 19:39:00
這是一個遞迴的概念...
作者: LPH66 (-6.2598534e+18f)   2014-09-21 19:42:00
new test; 這句話除了要空間之外還會呼叫 constructor看起來你是不是在寫類似 linklist 的東西?
作者: kwpn (ITSST)   2014-09-21 20:04:00
new不是配free
作者: tomnelson   2014-09-21 20:15:00
看來很多基本觀念還沒有建立,加油啦~
作者: kdok123 (小天)   2014-09-21 21:55:00
嗯! 我知道是遞迴了XD 感謝大家!
作者: Killercat (殺人貓™)   2014-09-21 22:51:00
老實講這個叫做bug 不叫做遞迴 XD另外如果這是linked list的話 是別人new好了attach進來才是正確概念 不是你去把node new出來

Links booklink

Contact Us: admin [ a t ] ucptt.com