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
Gunakan
GetHeadPosition
danGetNext
untuk melakukan iterasi melalui daftar.delete
Gunakan operator untuk menghapus setiap objek seperti yang ditemui dalam iterasi.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
Gunakan
GetSize
dan nilai indeks bilangan bulat untuk melakukan iterasi melalui array.delete
Gunakan operator untuk menghapus setiap elemen seperti yang ditemui dalam iterasi.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
Gunakan
GetStartPosition
danGetNextAssoc
untuk melakukan iterasi melalui array.delete
Gunakan operator untuk menghapus kunci dan/atau nilai untuk setiap elemen peta seperti yang ditemui dalam iterasi.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 danCPerson
objek (berasal dariCObject
) 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.