Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Anda Memadamkan Penunjuk dalam Vektor Dengan Selamat Tanpa Memusnahkan Objek yang Ditunjuk?

Bagaimanakah Anda Memadamkan Penunjuk dalam Vektor Dengan Selamat Tanpa Memusnahkan Objek yang Ditunjuk?

Patricia Arquette
Patricia Arquetteasal
2024-10-31 03:51:31401semak imbas

 How Do You Safely Delete Pointers in a Vector Without Destroying the Objects They Point To?

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*> &amp; 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn