ขณะนี้ฉันกำลังพยายามเรียนรู้วิธีใช้ตัวชี้อัจฉริยะ อย่างไรก็ตามในขณะที่ทำการทดลองบางอย่างฉันพบสถานการณ์ต่อไปนี้ซึ่งฉันไม่สามารถหาวิธีแก้ปัญหาที่น่าพอใจได้:
สมมติว่าคุณมีวัตถุของคลาส A เป็นผู้ปกครองของวัตถุคลาส B (เด็ก) แต่ทั้งสองควรรู้จักกัน:
class A;
class B;
class A
{
public:
void addChild(std::shared_ptr<B> child)
{
children->push_back(child);
// How to do pass the pointer correctly?
// child->setParent(this); // wrong
// ^^^^
}
private:
std::list<std::shared_ptr<B>> children;
};
class B
{
public:
setParent(std::shared_ptr<A> parent)
{
this->parent = parent;
};
private:
std::shared_ptr<A> parent;
};
คำถามคือออบเจ็กต์ของคลาส A จะส่งผ่านstd::shared_ptr
ตัวมันเอง ( this
) ไปยังลูกของมันได้อย่างไร?
มีโซลูชันสำหรับตัวชี้ที่ใช้ร่วมกันของ Boost ( การboost::shared_ptr
หาคำตอบthis
) แต่จะจัดการสิ่งนี้โดยใช้std::
ตัวชี้อัจฉริยะได้อย่างไร