2011-07-14 26 views
1

如果我有3個三分球翻番:如何在單個刪除語句中刪除多個動態分配的數組?

rdf1 = new double [n]; 

rdf2 = new double [n]; 

rdf3 = new double [n]; 

我想用一個單一的刪除語句刪除它們。例如:

delete [] rdf1,rdf2,rdf3; 

什麼是正確的做法?

+4

你會接受刪除他們沒有刪除語句? 'std :: vector rdf1(n),rdf2(n),rdf3(n);' –

+0

你可以寫一個宏來做到這一點。 – balki

回答

11

不幸的是,這是語法正確:

delete [] rdf1,rdf2,rdf3; 

更不幸的是,它不會做什麼,你認爲它。它將,視爲comma operator,因此最終只刪除rdf1(因爲運營商delete優先於運營商,)。

必須寫單獨delete []表達式來獲得預期的行爲。

delete [] rdf1; 
delete [] rdf2; 
delete [] rdf3; 
5

不,這是不正確的做法。您必須分別在每個指針上調用delete []

operator delete[]的標準格式將只有一個參數。

delete [] rdf1; 
delete [] rdf2; 
delete [] rdf3; 

我總是遵循一個原則,即我寫的代碼應該很容易被我後面的人理解。所以不是用任何奇特的構造來做這件事,我會以更常用的方式做到這一點(上圖)。

+0

正確。請參閱http://stackoverflow.com/questions/3037655/c-delete-syntax – andrewdski

+0

感謝您的鏈接。這很有幫助。 – vivek

6

爲了公平起見,你可以做它作爲一個單一聲明,只是不爲delete []運營商的一次調用:

(delete [] rdf1, delete [] rdf2, delete [] rdf3); 

但爲什麼在世界上你在乎它是否是一個還是三個?

+0

+1,就是我想說的! 'delete'不是一個語句,它是一個操作符(它是delete-expression的一部分)。儘管括號是多餘的。 – ybungalobill

+0

我不想讓它變得複雜。只是想知道是否可以用一個刪除操作符來做同樣的事情。 謝謝你的回答 – vivek