2012-12-09 50 views
1

我有這樣的代碼:數組類 - 刪除OPS

Derived **args = new Derived*[2]; 
args[0] = new Derived(); 
args[0]->setname("BLABLA \n"); 
cout << args[0]->getname(); 
delete args[0]; 

args[1] = new Derived(); 
args[1]->setname("BLABLABLA\n"); 
cout << args[1]->getname(); 
delete args[1]; 
delete [] args; 

是否需要delete [] args?爲什麼?

另外,Derived **args = new Derived*[2]真的做了什麼?是否爲Derived分配兩個指針的空間?如果是這樣,那麼我該如何動態創建一個包含2個Derived類型的對象的數組?

回答

1

delete []是否需要參數?爲什麼?

是的。它釋放了由new Derived*[2]分配的內存。

另外,Derived **args = new Derived*[2]真的做什麼?

這兩個指針Derived分配空間。它不分配空間用於任何Derived對象

我該如何動態創建一個數組,其中包含2個類型爲Derived的對象在堆上?

只是刪除一個間接層:

Derived *args = new Derived[2]; 

args[0].setname("BLABLA \n"); 
cout << args[0].getname(); 

args[1].setname("BLABLABLA\n"); 
cout << args[1].getname(); 

delete [] args; 

但是記住,數組和多態性不要混用。有關詳細信息,請參見How to make an array with polymorphism in C++?

+1

@SteveWellens:具體來說,它釋放指針數組,但肯定會__not__釋放指針指向的對象。 – Blastfurnace

+0

對,我剛剛刪除了我的評論。 –

+0

你是什麼意思「它分配兩個指向Derived的空間」?所以基本上我只是創建了一個大小爲2的數組,其中包含指向Derived類型對象的指針?如果是這樣,那麼我該如何動態創建一個包含2個Derived類型的對象的數組? – Kam