我開始自學C++,如何在沒有垃圾回收器的情況下處理對象正在引起一些混淆。這裏是我正在嘗試做的一個簡單的例子:確保C++對象正確解除分配
A* a;
B b = new B(a); // Note that B is a derived class of A
a = &b;
while (a != NULL)
{
(*a).run();
}
這一切都按我期望的那樣工作。當我遇到的問題是,B的run()方法裏面,我想要做的事,如:
C c = new C(a); // a is the same pointer as above, that has been stored
// and C another derived class from A
a = &c;
,然後讓run()中退出。然後,第一個塊中的while循環會調用新對象的run()。我的問題是,如何確保原始b的內存被正確解除分配?
你不需要通過'new'分配的一切。這是完全正確的(並且實際上更可取),就像這樣聲明變量:'B b;'或'C c;'。如果對象需要存在於其當前作用域之外,請使用[智能指針](http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c)。 –
大部分上述代碼未能編譯。在C++中,對象和指向對象的指針是不一樣的。 – Yakk
我發現我極大地過分強調了我想要做的事情。我只是讓run()返回類型A,並且完全避免指針。考慮到我關於重新分配的問題,答案很有見地。 @Yakk,錯誤是什麼? –