vektor::erase(): Memadam Penunjuk Tanpa Pemusnahan Objek
Masalah:
Vektor penunjuk objek memerlukan penyingkiran elemen sambil mengekalkan objek itu sendiri. Walau bagaimanapun, kebimbangan timbul mengenai kemungkinan kemusnahan objek apabila dialih keluar.
Jawapan:
vector::erase() mengalih keluar elemen secara berkesan daripada vektor dan memanggil pemusnah . Walau bagaimanapun, apabila berurusan dengan penunjuk, pemusnah tidak campur tangan dengan pemusnahan objek sebenar. Ini kerana bekas tidak mengambil alih pemilikan objek yang ditunjuk.
Penyelesaian:
Untuk memadamkan objek yang ditunjuk, adalah penting untuk menggunakan secara eksplisit operator padam pada setiap penunjuk. Berikut ialah coretan kod ilustrasi:
<code class="cpp">void clearVectorContents( std::vector <YourClass*> & a ) { for ( int i = 0; i < a.size(); i++ ) { delete a[i]; } a.clear(); }
Awas:
Menyimpan penunjuk mentah dalam bekas standard adalah tidak digalakkan. Sebaliknya, pertimbangkan untuk menggunakan boost::shared_ptr untuk mengurus peruntukan sumber dengan berkesan dengan penunjuk.
Penyelesaian Elegan:
Untuk pendekatan yang lebih serba boleh dan cekap, laksanakan functor untuk memadam penunjuk dalam vektor. Berikut ialah ilustrasi:
<code class="cpp">// Functor for deleting pointers in vector. template<class T> class DeleteVector { public: // Overloaded () operator. // This will be called by for_each() function. bool operator()(T x) const { // Delete pointer. delete x; return true; } };</code>
Menyebut functor ini dengan for_each menyediakan penyelesaian yang pantas dan ringkas:
<code class="cpp">for_each( myclassVector.begin(),myclassVector.end(), DeleteVector<myclass*>());</code>
di mana myclassVector menandakan vektor yang memegang penunjuk kepada objek myclass.
Strategi ini memastikan bahawa semua objek yang menunjuk ke arah dihapuskan dengan selamat sambil mengekalkan integriti vektor.
Atas ialah kandungan terperinci Bagaimanakah Anda Memadamkan Penunjuk dalam Vektor Dengan Selamat Tanpa Memusnahkan Objek yang Ditunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!