2014-03-28 233 views
-2

我想問一下我的程序一個簡單的問題,我做一些樣的系統,用於動態分配我正在指針數組的指針這樣刪除指針數組的指針指向對象

Vehicle **temp=new Vehical*[countVehicle]; 

然後

temp[countVehicle-1]=new Car(); 

你一定明白我在做什麼。刪除內存時出現問題。您能否告訴我如何在這種情況下刪除內存。

+0

使用智能指針向量。 – chris

+0

我想要它沒有載體,因爲我沒有看過那個話題 – user3215228

+0

他們更容易,更安全(可以使用幾乎完全像指針)。現在更好地學習,而不是嘗試手動管理內存。 – chris

回答

2
for (int i = 0; i < countVehicle; ++i) 
{ 
    delete temp[i]; // assert destructor is virtual! 
} 
delete[] temp; 

確保析構函數的基類,Vehicle,所以通過基類指針刪除對象時正確調用析構函數,因爲它發生例如上述聲明虛擬。

class Vehicle { 
public: 
    //... 
    virtual ~Vehicle() {} 
}; 

然而,你應該考慮使用智能指針的std::vector,e.g

{ 
    std::vector< boost::shared_ptr<Vehicle> > v; 
    v.push_back(boost::shared_ptr<Vehicle>(new Car())); 
    v[0]->run(); // or whatever your Vehicle can do 
    //... 
} // << When v goes out of scope the memory is automatically deallocated. 

這將緩解內存管理。

1

如果您肯定知道,在溫度指針爲NULL或再有效的分配汽車:

for(int i = 0; i < countVehicle; ++i) 
    delete temp[i]; 
delete[] temp; 

這隻會正常工作,如果車輛有一個虛析構函數。否則,你不會正確銷燬每輛車。

+0

是的,這就是爲什麼它沒有運行,由於虛擬析構函數可以請修改你的答案,並簡要介紹虛擬析構函數 – user3215228

+0

@ user3215228你需要什麼來解釋關於虛擬析構函數? – 4pie0