如果我有3個三分球翻番:如何在單個刪除語句中刪除多個動態分配的數組?
rdf1 = new double [n];
rdf2 = new double [n];
rdf3 = new double [n];
我想用一個單一的刪除語句刪除它們。例如:
delete [] rdf1,rdf2,rdf3;
什麼是正確的做法?
如果我有3個三分球翻番:如何在單個刪除語句中刪除多個動態分配的數組?
rdf1 = new double [n];
rdf2 = new double [n];
rdf3 = new double [n];
我想用一個單一的刪除語句刪除它們。例如:
delete [] rdf1,rdf2,rdf3;
什麼是正確的做法?
不幸的是,這是語法正確:
delete [] rdf1,rdf2,rdf3;
更不幸的是,它不會做什麼,你認爲它。它將,
視爲comma operator,因此最終只刪除rdf1
(因爲運營商delete
優先於運營商,
)。
您必須寫單獨delete []
表達式來獲得預期的行爲。
delete [] rdf1;
delete [] rdf2;
delete [] rdf3;
不,這是不正確的做法。您必須分別在每個指針上調用delete []
。
operator delete[]
的標準格式將只有一個參數。
delete [] rdf1;
delete [] rdf2;
delete [] rdf3;
我總是遵循一個原則,即我寫的代碼應該很容易被我後面的人理解。所以不是用任何奇特的構造來做這件事,我會以更常用的方式做到這一點(上圖)。
正確。請參閱http://stackoverflow.com/questions/3037655/c-delete-syntax – andrewdski
感謝您的鏈接。這很有幫助。 – vivek
爲了公平起見,你可以做它作爲一個單一聲明,只是不爲delete []
運營商的一次調用:
(delete [] rdf1, delete [] rdf2, delete [] rdf3);
但爲什麼在世界上你在乎它是否是一個還是三個?
+1,就是我想說的! 'delete'不是一個語句,它是一個操作符(它是delete-expression的一部分)。儘管括號是多餘的。 – ybungalobill
我不想讓它變得複雜。只是想知道是否可以用一個刪除操作符來做同樣的事情。 謝謝你的回答 – vivek
你會接受刪除他們沒有刪除語句? 'std :: vector rdf1(n),rdf2(n),rdf3(n);' –
你可以寫一個宏來做到這一點。 – balki