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
Lepaskan: 2024-10-31 03:51:31
asal
420 orang telah melayarinya

 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(); 
} 
Salin selepas log masuk

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>
Salin selepas log masuk

Menyebut functor ini dengan for_each menyediakan penyelesaian yang pantas dan ringkas:

<code class="cpp">for_each( myclassVector.begin(),myclassVector.end(),
          DeleteVector<myclass*>());</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan