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

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

Susan Sarandon
Lepaskan: 2024-10-30 14:34:11
asal
528 orang telah melayarinya

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 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