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

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

Barbara Streisand
Barbara Streisandasal
2024-12-15 17:07:11753semak imbas

How to Use Custom Deleters with `std::unique_ptr` Member Variables?
```

Menggunakan Pemadam Tersuai dengan Pembolehubah Ahli std::unique_ptr

Apabila bekerja dengan kelas pihak ketiga yang memerlukan mekanisme pemadaman tertentu, anda mungkin menghadapi senario di mana anda perlu gunakan pemadam tersuai dengan pembolehubah ahli std::unique_ptr. Artikel ini menyediakan penyelesaian untuk mencapai perkara ini.

Masalah

Bayangkan anda mempunyai kelas Foo dengan pembolehubah ahli jenis std::unique_ptr. Dalam senario ini, Bar kelas pihak ketiga mempunyai fungsi create() dan destroy() khusus untuk penciptaan dan pemusnahan objek.

Contoh Fungsi Kendiri

Dalam fungsi kendiri, anda boleh menggunakan pemadam tersuai dengan std::unique_ptr seperti berikut:

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

Menggunakan Penghapus Tersuai dengan Ahli Pembolehubah

Untuk mencapai kefungsian yang sama apabila bekerja dengan pembolehubah ahli, berikut ialah penyelesaiannya:

class Foo {

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

    // ...

public:

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

    // ...
};

Dalam kod ini:

  • Pembolehubah ahli ptr_ diisytiharkan sebagai unique_ptr jenis Bar.
  • Pemadam tersuai ditentukan sebagai parameter templat kedua, iaitu fungsi penunjuk dengan tandatangan void(*)(Bar*).
  • Pembina kelas memulakan ptr_ menggunakan fungsi create() dan destroy() sebagai pemadam.

Pendekatan ini membenarkan anda untuk menggunakan pemadam tersuai untuk pembolehubah ahli std::unique_ptr dengan mudah, memastikan pengurusan sumber yang betul walaupun untuk pihak ketiga kelas.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Penghapus Tersuai dengan Pembolehubah Ahli `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