Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggunakan Penghapus Tersuai dengan Ahli Kelas `std::unique_ptr`?

Bagaimana untuk Menggunakan Penghapus Tersuai dengan Ahli Kelas `std::unique_ptr`?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 07:00:11940semak imbas

How to Use Custom Deleters with `std::unique_ptr` Class Members?

Menggunakan Penghapus Tersuai dengan Ahli std::unique_ptr

Dalam pengaturcaraan, menggunakan pemadam tersuai dengan ahli std::unique_ptr boleh memberikan yang lebih besar kawalan ke atas pemusnahan objek. Artikel ini bertujuan untuk menangani persoalan tentang cara memasukkan pemadam tersuai dalam struktur kelas.

Pertimbangkan senario di mana kelas, Foo, mengandungi ahli jenis std::unique_ptr. Bar ialah kelas pihak ketiga yang menawarkan fungsi create() dan destroy(). Apabila bekerja dengan std::unique_ptr dalam fungsi kendiri, sintaks berikut boleh digunakan:

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); });
}

Pendekatan ini membenarkan spesifikasi pemadam tersuai menggunakan ungkapan lambda. Timbul persoalan: adakah terdapat cara untuk meniru tingkah laku ini apabila std::unique_ptr digunakan sebagai ahli kelas?

Penyelesaian: Penghapus Tersuai untuk Ahli Kelas

Dengan mengandaikan bahawa mencipta dan memusnahkan adalah fungsi percuma, penyelesaian berikut boleh dilaksanakan:

class Foo {

    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

public:

    Foo() : ptr_(create(), destroy) { /* ... */ }

    // ...
};

Dalam senario ini, pemadam tersuai disediakan terus dalam definisi kelas. Fungsi musnah digunakan sebagai pemadam, menafikan keperluan untuk ungkapan lambda. Pendekatan ini memastikan objek Bar dimusnahkan dengan betul apabila objek Foo terkeluar dari skop.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Penghapus Tersuai dengan Ahli Kelas `std::unique_ptr`?. 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