Bagaimana untuk Menggantikan Pemadaman Lalai dengan Pemusnah Tersuai untuk Penunjuk Dikongsi Boost?

Barbara Streisand
Lepaskan: 2024-10-27 05:21:29
asal
795 orang telah melayarinya

How to Replace Default Deletion with Custom Destructors for Boost's Shared Pointers?

Menggantikan Pemadaman Lalai dengan Pemusnah Tersuai untuk Penunjuk Dikongsi

Share_ptr Boost biasanya menggunakan fungsi padam untuk memusnahkan objek yang diperuntukkan. Walau bagaimanapun, terdapat senario di mana pembangun mungkin mahu menggunakan pemusnah tersuai.

Mengatasi Pemadaman Lalai

Untuk mengatasi kelakuan pemadaman lalai, anda boleh menggunakan fungsi ahli sebagai pemusnah tersuai. Contohnya:

<code class="cpp">class CustomDeletable {
public:
    void deleteMe() {
        // Implement custom deletion logic here
    }
};

boost::shared_ptr<CustomDeletable> ptr(new CustomDeletable, &CustomDeletable::deleteMe);</code>
Salin selepas log masuk

Mengendalikan Fungsi Gaya C

Untuk fungsi gaya C yang mengembalikan penunjuk, anda boleh menggunakan functor pembalut untuk mengubah hala proses pemadaman:

<code class="cpp">// Custom destructor functor for C-style functions
struct LibFreeFunctor {
    void operator()(void *ptr) {
        lib_freeXYZ(ptr);
    }
};

// Usage with shared_ptr
boost::shared_ptr<void> ptr(new void*, LibFreeFunctor());</code>
Salin selepas log masuk

Menggunakan Fungsi Pembungkus STL

Sebagai alternatif, STL menyediakan fungsi pembungkus yang boleh digunakan tanpa memerlukan pemanggil tersuai:

<code class="cpp">boost::shared_ptr<T> ptr(new T, std::mem_fun_ref(&T::deleteMe));
boost::shared_ptr<S> ptr(new S, std::ptr_fun(lib_freeXYZ));</code>
Salin selepas log masuk

Dengan menggunakan teknik ini, anda boleh menyesuaikan shared_ptr untuk memanggil pemusnah tersuai, memberikan fleksibiliti dalam mengurus jangka hayat objek dan penetapan peruntukan sumber.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Pemadaman Lalai dengan Pemusnah Tersuai untuk Penunjuk Dikongsi Boost?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!