Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Berkongsi Rujukan dengan Selamat kepada \'ini\' dengan Objek Kanak-kanak Menggunakan `std::shared_ptr`?

Bagaimanakah Saya Boleh Berkongsi Rujukan dengan Selamat kepada \'ini\' dengan Objek Kanak-kanak Menggunakan `std::shared_ptr`?

Barbara Streisand
Barbara Streisandasal
2024-10-29 11:46:30394semak imbas

How Can I Safely Share a Reference to

std::shared_ptr of "this" Conundrum

Dalam bidang petunjuk pintar, anda mungkin menghadapi senario di mana objek kelas A, ibu bapa, perlu berkongsi rujukan kepada dirinya sendiri dengan anaknya, objek kelas B. Walau bagaimanapun, menghantar penunjuk mudah kepada "ini" boleh mengakibatkan ralat yang tidak masuk akal.

Penyelesaian terletak pada teka-teki yang membingungkan std::enable_shared_from_this tool. Mewarisi daripada kelas ini memberi kuasa kepada anda untuk mengakses .shared_from_this() dalam kelas, memberikan anda pemilikan bersama objek semasa.

Walau bagaimanapun, kaveat penting muncul daripada kesalinghubungan ini: potensi untuk kebergantungan bulat. Untuk mengelakkan masalah kebocoran sumber, adalah bijak untuk memperkenalkan std::weak_ptr apabila mencipta kebergantungan sedemikian.

Mengikut pendekatan yang disemak ini, kod anda yang disemak mungkin menyerupai yang berikut:

<code class="cpp">class A : public std::enable_shared_from_this<A>
{
public:
    void addChild(std::shared_ptr<B> child)
    {
        children.push_back(child);
        child->setParent(shared_from_this()); // Corrected reference passing
    }

private:
    std::list<std::weak_ptr<B>> children; // Using weak_ptr to prevent circular references
};

class B
{
public:
    void setParent(std::shared_ptr<A> parent)
    {
        this->parent = parent;
    }

private:
    std::shared_ptr<A> parent;
};</code>

Perlu diingat bahawa memanggil .shared_from_this() memerlukan pemilikan objek oleh std::shared_ptr pada masa seruan. Ini menghapuskan kemungkinan objek yang diperuntukkan tindanan dan secara amnya mengehadkan panggilan ke .shared_from_this() daripada dalam pembina atau pemusnah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berkongsi Rujukan dengan Selamat kepada \'ini\' dengan Objek Kanak-kanak Menggunakan `std::shared_ptr`?. 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