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

Bagaimanakah Saya Boleh Menggunakan Penghapus Tersuai dengan Ahli std::unique_ptr dalam Kelas C?

Susan Sarandon
Lepaskan: 2024-12-08 12:16:11
asal
778 orang telah melayarinya

How Can I Use Custom Deleters with std::unique_ptr Members in a C   Class?

Penghapus Tersuai dengan Ahli std::unique_ptr

Dalam C , kelas std::unique_ptr menawarkan cara yang mudah untuk mengurus pemilikan penunjuk -objek berasaskan. Walau bagaimanapun, jika anda bekerja dengan objek pihak ketiga yang memerlukan proses pemadaman tersuai, anda mungkin menghadapi cabaran apabila menggunakan std::unique_ptr sebagai ahli kelas.

Pertimbangkan senario berikut: anda mempunyai kelas dengan std::unique_ptr ahli. Kelas Bar adalah daripada perpustakaan pihak ketiga dan mentakrifkan fungsi create() dan destroy()nya sendiri untuk instantiasi dan pemusnahan objek.

Untuk menggunakan std::unique_ptr dengan senario sedemikian dalam fungsi kendiri, anda boleh menggunakan pemadam tersuai:

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

Tetapi bagaimana anda boleh mencapai ini apabila std::unique_ptr ialah ahli kelas?

Penghapus Tersuai dalam Ahli Kelas

Dengan mengandaikan bahawa mencipta dan memusnahkan adalah fungsi percuma dengan tandatangan berikut:

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

Anda boleh menentukan kelas Foo anda sebagai berikut:

class Foo {

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

    // ...

public:

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

    // ...
};
Salin selepas log masuk

Dalam pelaksanaan ini, anda secara langsung menyediakan fungsi musnah sebagai pemadam untuk std::unique_ptr. Dengan menggunakan fungsi percuma sebagai pemadam, anda mengelakkan keperluan untuk kelas lambdas atau pemadam tersuai.

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