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
724 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!

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