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
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); }); ... }
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*);
Anda boleh menentukan kelas Foo anda sebagai berikut:
class Foo { std::unique_ptr<Bar, void (*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
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!