私は、二重に3つのポインターがある場合:1つのdeleteステートメントで複数の動的に割り当てられた配列を削除するにはどうすればよいですか?
rdf1 = new double [n];
rdf2 = new double [n];
rdf3 = new double [n];
を、私は、単一の削除声明でそれらを削除したいです。次のようなもの:
delete [] rdf1,rdf2,rdf3;
これは正しい方法ですか?
私は、二重に3つのポインターがある場合:1つのdeleteステートメントで複数の動的に割り当てられた配列を削除するにはどうすればよいですか?
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[]
の標準形式は、1つのパラメータのみをとります。
delete [] rdf1;
delete [] rdf2;
delete [] rdf3;
私が書いたコードは、私の後でそれに取り組む人が容易に理解できるはずの1つの原則に従います。だから、これを何か素晴らしい構想で行うのではなく、より一般的に知られている方法(これは上にあります)を行うでしょう。
正しい。 http://stackoverflow.com/questions/3037655/c-delete-syntax – andrewdski
リンクをありがとうございます。それは役に立ちました。 – vivek
公平にするためには、あなただけではないdelete []
オペレータの単一の呼び出しとして、単一の文としてそれを行うことができます。
(delete [] rdf1, delete [] rdf2, delete [] rdf3);
しかし、世界では、あなたはそれかどうか、なぜ気にしません1つのステートメントか3つですか?
+1、ちょうど私が言いたいこと! 'delete'は文ではなく、演算子です(delete式の一部です)。しかし、括弧は冗長です。 – ybungalobill
私はそれを複雑にしたくありませんでした。 1つの削除演算子で同じことを実行できるかどうかは不思議です。 あなたの答えはThanx – vivek
削除ステートメントを使用せずに削除できますか? 'std :: vector rdf1(n)、rdf2(n)、rdf3(n); –
これを行うためのマクロを書くことができます。 – balki