10

要素の配列を削除するには、 を使用しますdelete[]。以下の方法でポインタを削除することはできますか?

ClassA* object = new ClassA();
ClassA* pointer1 = object;

ClassA* object2 = new ClassA();
ClassA* pointer2 = object2;

delete pointer1,pointer2;

この方法で削除を使用できないのはなぜですか?

[編集]

上記の削除が実装されていないことによる欠点は何ですか?

4

2 に答える 2

13

C++ 言語定義には規定がないため、これは不可能です。言語が のアイテムのリストをサポートしていない理由に対する「良い」答えがあるかどうかはわかりませんが、deleteそうしない方が簡単であるという事実を除いて.

delete変数ごとに 1 つ記述する必要があります。もちろん、多数の がある場合はpointerX、代わりに配列を使用し、ループを使用してオブジェクトを削除する必要があります。

編集: もちろん、deleteコード内の多くの場所で呼び出しを行っている場合は、おそらく何か間違ったことをしている可能性があります。または、少なくとも、RAIIの原則にうまく従っていません。newもちろん、言語を完全に理解するには、動的割り当てを学習/理解する必要がありますが、両方を呼び出すことは避けdelete、自分のコードで呼び出すことは避けてください。他の人にそれを整理してもらいます (または、「正しいこと」を行うクラスを記述します)。

于 2013-09-15T08:30:18.100 に答える
1

このようには機能していません。delete は、単一のポインターに対するコマンドです。ポインターを構造体 (配列など) またはコンテナー (ベクトル コンテナー クラスを使用するなど) に配置し、構造体/コンテナーを反復することでそれぞれを削除できます。

于 2013-09-15T08:30:52.907 に答える