2

動的配列があります (この例では、SIZE = 2):

polyTerm** polyn = new polyTerm* [SIZE];

次に、いくつかの新しい ponlyTerm オブジェクトを配列に追加します。

polyn[0] = new polyTerm(5.0,1);
polyn[1] = new polyTerm(2.0,1);

ここで、スロット 0 からオブジェクトを削除し、ポインターを null にします。どうすればこれを行うことができますか?私は現在持っています:

delete &polyn[0];

それから私は使用します:

polyn[0] = NULL;

ポインターを null にします。

これは機能しますか?

編集:修正、使用する必要がありますdelete polyn[0]-それでも、NULLに設定すると、技術的にはオブジェクトの元の場所を指すため、ポインターに影響するはずです。NULL にリセットすると、後でポップアップする可能性のあるエラーが削除されます。

4

1 に答える 1

2

あなたが投稿したコードは正しいです。

個々のオブジェクト ポインタは、 の非バージョンをpolyn[0]使用して作成されたため、非バージョンの-- を使用して削除する必要があります。[]new[]delete

ただし、最初はこれらすべてを回避し、vector <unique_ptr <polyTerm> >代わりに使用することをお勧めします。その後、あなたがしなければならないのはerase、必要な要素、またはの正しいタイプと数を使用することを心配することなくclear全体です。vectornewdelete


vectorここではスマート ポインターの使用を示し、代わりにmake_unique使用することで (C++14 まで)不足を回避しshared_ptrます。

// Create array (vector)
vector <shared_ptr <polyTerm>> polyn; 
// Populate array
polyn.push_back (make_shared (5.0, 1));
polyn.push_back (make_shared (2,0, 1));
// Remove 0th element from array
polyn.erase (polyn.begin());
于 2013-11-04T17:08:39.340 に答える