Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah std::shared_ptr berfungsi untuk pembersihan sewenang-wenangnya semasa penutupan?

Bagaimanakah std::shared_ptr berfungsi untuk pembersihan sewenang-wenangnya semasa penutupan?

Susan Sarandon
Susan Sarandonasal
2024-10-30 14:34:11375semak imbas

How does std::shared_ptr<void> berfungsi untuk pembersihan sewenang-wenangnya semasa penutupan? 
berfungsi untuk pembersihan sewenang-wenangnya semasa penutupan? " />

Mengapa std::shared_ptr Berfungsi

Walaupun dijangka, std::shared_ptr boleh digunakan untuk melakukan pembersihan sewenang-wenangnya semasa penutupan, walaupun semasa menggunakan std::shared_ptr

Taip Pemadaman

Apabila shared_ptr dicipta, ia merangkum penunjuk yang dimiliki bersama-sama dengan fungsi pemadam tetapi boleh dikonfigurasikan secara berbeza melalui pembina Setelah pemusnahan shared_ptr, the pemadam tersimpan dipanggil, mencetuskan pembersihan objek.

Untuk memahami pemadaman jenis, pertimbangkan contoh mudah berikut menggunakan std::function:

template 
void delete_deleter(void *p) {
    delete static_cast(p);
}

template 
class my_unique_ptr {
public:
    my_unique_ptr(T *p, void(*deleter)(void *p) = &delete_deleter) 
        : p(p), deleter(deleter) 
    {}

    ~my_unique_ptr() {
        deleter(p);
    }

private:
    T *p;
    void(*deleter)(void *);
};

int main() {
    my_unique_ptr p(new double);
}

Di sini, my_unique_ptr daripada penuding sebarang jenis. Pemadam menyimpan fungsi pemadaman khusus jenis, memastikan bahawa pemusnah yang betul dipanggil semasa pembersihan.

std::shared_ptr dan Type Erasure

Penunjuk yang dikongsi juga menggunakan pemadaman jenis. Apabila menyalin atau membina shared_ptr secara lalai daripada yang lain, maklumat pemadam disimpan. Ini bermakna perkongsian_ptr dibina daripada shared_ptr mengekalkan pengetahuan yang diperlukan untuk memanggil pemusnah yang sesuai, walaupun apabila dihantar ke shared_ptr.

Mengikut piawaian C, tingkah laku ini dijamin. Pelaksanaan tidak boleh mengubah dalaman std::shared_ptr dengan cara yang akan memecahkan fungsi ini. Oleh itu, menggunakan std::shared_ptr kerana pembersihan sewenang-wenangnya adalah teknik yang sah dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimanakah std::shared_ptr berfungsi untuk pembersihan sewenang-wenangnya semasa penutupan?. 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