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
Lepaskan: 2024-12-06 07:00:11
asal
922 orang telah melayarinya

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

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) { /* ... */ }

    // ...
};
Salin selepas log masuk

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!

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