Tôi hiện đang cố gắng học cách sử dụng con trỏ thông minh. Tuy nhiên, trong khi thực hiện một số thử nghiệm, tôi đã phát hiện ra tình huống sau mà tôi không thể tìm ra giải pháp thỏa mãn:
Hãy tưởng tượng bạn có một đối tượng của lớp A là cha của một đối tượng thuộc lớp B (con), nhưng cả hai nên biết nhau:
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;
};
Câu hỏi đặt ra là làm thế nào một đối tượng của lớp A có thể truyền một std::shared_ptr
của chính nó ( this
) cho con của nó?
Có các giải pháp cho con trỏ chia sẻ Boost ( Bắt boost::shared_ptr
chothis
), nhưng làm thế nào để xử lý điều này bằng cách sử dụng std::
con trỏ thông minh?