這是我第一次體驗智能指針在c + +中,我有一些理解問題。 我想設計一些基於組件的OpenGL框架。加速智能指針設計問題
所以我有一個Scene類創建節點(並存儲自己)並將其作爲shared_ptr返回。 節點類有一個在Node類中創建的組件列表,並且作爲shared_ptr再次返回,但這些組件還需要對其所有者(節點)的引用,並且節點本身應將其指針傳遞給其組件。
現在:指向組件中的節點的指針,它應該是什麼?一個shared_ptr或一個weak_ptr。以及如何通過節點本身的節點(節點沒有引用其存儲在場景中的shared_ptr)
//!編輯1
class Scene
{
vector<shared_ptr<Node>> nodes;
public:
weak_ptr<Node> NewNode();
}
class Node
{
vector<shared_ptr<Component>> components;
public:
weak_ptr<Component> AddComponent();
weak_ptr<Component> GetComponent(String classname);
vecotr<weak_ptr<Component>> GetComponents(String classname);
}
class Component
{
weak_ptr<Node> owner;
Component(weak_ptr<Node> owner_refernce);
public:
// component stuff
weak_ptr<Node> GetOwner();
friend class Node;
}
請幫我在這裏做最好的設計。
//編輯1:要更清楚!
場景是節點的唯一擁有者。它創造並摧毀它們。 每個節點擁有其所有組件。它創造並摧毀它們。 而組件需要對其所有者的引用,它們將與其他對象共享(通過在Get方法中返回所有者)。
- >場景擁有節點和節點自己的組件。
- >場景股節點(通過名稱返回節點對象)
- >節點共享其所有組件(通過類名返回成分)
- >部件分享他們的所有者(返程所有者參考)
如何共享對象而不共享所有權? weak_ptr ??
編輯2:看來智能指針在這種情況下是沒有用的。所以我用行指針去爲現在
無論如何避免通過'shared_ptr'進行循環引用!恕我直言,'Component'中的'owner'應該是'weak_ptr'。 –