Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggantikan Pemadaman Lalai dengan Pemusnah Tersuai untuk Penunjuk Dikongsi Boost?

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

Barbara Streisand
Barbara Streisandasal
2024-10-27 05:21:29900semak imbas

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>

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>

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>

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!

Kenyataan:
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