Bagikan melalui


Menghapus Semua Objek dalam Koleksi CObject

Artikel ini menjelaskan cara menghapus semua objek dalam koleksi (tanpa menghapus objek koleksi itu sendiri).

Untuk menghapus semua objek dalam kumpulan CObject(atau objek yang berasal dari CObject), Anda menggunakan salah satu teknik iterasi yang dijelaskan dalam artikel Mengakses Semua Anggota Koleksi untuk menghapus setiap objek secara bergantian.

Perhatian

Objek dalam koleksi dapat dibagikan. Artinya, koleksi menyimpan penunjuk ke objek, tetapi bagian lain dari program mungkin juga memiliki penunjuk ke objek yang sama. Anda harus berhati-hati agar tidak menghapus objek yang dibagikan hingga semua bagian selesai menggunakan objek.

Artikel ini memperlihatkan kepada Anda cara menghapus objek di:

Untuk menghapus semua objek dalam daftar penunjuk ke CObject

  1. Gunakan GetHeadPosition dan GetNext untuk melakukan iterasi melalui daftar.

  2. delete Gunakan operator untuk menghapus setiap objek seperti yang ditemui dalam iterasi.

  3. RemoveAll Panggil fungsi untuk menghapus semua elemen dari daftar setelah objek yang terkait dengan elemen tersebut telah dihapus.

Contoh berikut menunjukkan cara menghapus semua objek dari daftar CPerson objek. Setiap objek dalam daftar adalah penunjuk ke CPerson objek yang awalnya dialokasikan pada timbunan.

CTypedPtrList<CObList, CPerson*> myList;
CPerson* pPerson = new CPerson();
myList.AddHead(pPerson);
POSITION pos = myList.GetHeadPosition();

while (pos != NULL)
{
   delete myList.GetNext(pos);
}
myList.RemoveAll();

Panggilan fungsi terakhir, RemoveAll, adalah fungsi anggota daftar yang menghapus semua elemen dari daftar. Fungsi RemoveAt anggota menghapus satu elemen.

Perhatikan perbedaan antara menghapus objek elemen dan menghapus elemen itu sendiri. Menghapus elemen dari daftar hanya menghapus referensi daftar ke objek. Objek masih ada dalam memori. Saat Anda menghapus objek, objek akan berhenti ada dan memorinya diklaim kembali. Dengan demikian, penting untuk menghapus elemen segera setelah objek elemen dihapus sehingga daftar tidak akan mencoba mengakses objek yang tidak ada lagi.

Untuk menghapus semua elemen dalam array

  1. Gunakan GetSize dan nilai indeks bilangan bulat untuk melakukan iterasi melalui array.

  2. delete Gunakan operator untuk menghapus setiap elemen seperti yang ditemui dalam iterasi.

  3. RemoveAll Panggil fungsi untuk menghapus semua elemen dari array setelah dihapus.

    Kode untuk menghapus semua elemen array adalah sebagai berikut:

    CArray<CPerson*, CPerson*> myArray;
    
    int i = 0;
    while (i < myArray.GetSize())
    {
       delete myArray.GetAt(i++);
    }
    
    myArray.RemoveAll();
    

Seperti contoh daftar di atas, Anda dapat memanggil RemoveAll untuk menghapus semua elemen dalam array atau RemoveAt untuk menghapus elemen individual.

Untuk menghapus semua elemen dalam peta

  1. Gunakan GetStartPosition dan GetNextAssoc untuk melakukan iterasi melalui array.

  2. delete Gunakan operator untuk menghapus kunci dan/atau nilai untuk setiap elemen peta seperti yang ditemui dalam iterasi.

  3. RemoveAll Panggil fungsi untuk menghapus semua elemen dari peta setelah dihapus.

    Kode untuk menghapus semua elemen CMap koleksi adalah sebagai berikut. Setiap elemen dalam peta memiliki string sebagai kunci dan CPerson objek (berasal dari CObject) sebagai nilai .

    CMap<CString, LPCTSTR, CPerson*, CPerson*> myMap;
    // ... Add some key-value elements ...
    // Now delete the elements
    POSITION pos = myMap.GetStartPosition();
    while (pos != NULL)
    {
       CPerson* pPerson;
       CString string;
       // Gets key (string) and value (pPerson)
       myMap.GetNextAssoc(pos, string, pPerson);
       delete pPerson;
    }
    // RemoveAll deletes the keys
    myMap.RemoveAll();
    

Anda dapat memanggil RemoveAll untuk menghapus semua elemen dalam peta atau RemoveKey untuk menghapus elemen individual dengan kunci yang ditentukan.

Baca juga

Mengakses Semua Anggota Koleksi