Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Penghapus Tersuai dengan Ahli std::unique_ptr untuk Kelas Pihak Ketiga?

Bagaimanakah Saya Boleh Menggunakan Penghapus Tersuai dengan Ahli std::unique_ptr untuk Kelas Pihak Ketiga?

Patricia Arquette
Lepaskan: 2024-12-06 03:17:10
asal
558 orang telah melayarinya

How Can I Use Custom Deleters with std::unique_ptr Members for Third-Party Classes?

Menggunakan Penghapus Tersuai dengan Ahli std::unique_ptr

Dalam pengaturcaraan berorientasikan objek, selalunya wajar untuk menggunakan objek ahli yang diurus oleh unik penunjuk (std::unique_ptr). Walau bagaimanapun, apabila berurusan dengan kelas pihak ketiga yang mempunyai keperluan pengurusan memori tersuai, menggunakan pemadam tersuai boleh terbukti bermanfaat.

Pertimbangkan senario di mana anda mempunyai kelas (Foo) dengan ahli yang diuruskan oleh penunjuk unik ( std::unique_ptr). Kelas pihak ketiga (Bar) menyediakan fungsi create() dan destroy() untuk pengurusan memori.

Untuk menangani perkara ini, anda boleh melaksanakan pemadam tersuai dalam kelas Foo anda, menggunakan sintaks yang serupa dengan yang berikut:

class Foo {
private:
    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

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

    // ...
};
Salin selepas log masuk

Dalam contoh ini, create() dan destroy() diandaikan sebagai fungsi bebas yang mematuhi perkara berikut tandatangan:

Bar* create();
void destroy(Bar*);
Salin selepas log masuk

Dengan menentukan musnahkan sebagai hujah templat kedua penuding unik, anda secara berkesan mengarahkan penuding untuk memanggil destroy() apabila objek terurus dipadamkan.

Pendekatan ini membenarkan anda untuk menguruskan memori objek ahli pihak ketiga anda dengan lancar sambil mengekalkan faedah menggunakan petunjuk unik, seperti urusan pembahagian sumber automatik dan pemilikan semantik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penghapus Tersuai dengan Ahli std::unique_ptr untuk Kelas Pihak Ketiga?. 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