2011-07-14 6 views
1

私は、二重に3つのポインターがある場合:1つのdeleteステートメントで複数の動的に割り当てられた配列を削除するにはどうすればよいですか?

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[]の標準形式は、1つのパラメータのみをとります。

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

私が書いたコードは、私の後でそれに取り組む人が容易に理解できるはずの1つの原則に従います。だから、これを何か素晴らしい構想で行うのではなく、より一般的に知られている方法(これは上にあります)を行うでしょう。

+0

正しい。 http://stackoverflow.com/questions/3037655/c-delete-syntax – andrewdski

+0

リンクをありがとうございます。それは役に立ちました。 – vivek

6

公平にするためには、あなただけではないdelete []オペレータの単一の呼び出しとして、単一の文としてそれを行うことができます。

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

しかし、世界では、あなたはそれかどうか、なぜ気にしません1つのステートメントか3つですか?

+0

+1、ちょうど私が言いたいこと! 'delete'は文ではなく、演算子です(delete式の一部です)。しかし、括弧は冗長です。 – ybungalobill

+0

私はそれを複雑にしたくありませんでした。 1つの削除演算子で同じことを実行できるかどうかは不思議です。 あなたの答えはThanx – vivek

関連する問題