我的程序面临设计问题。我必须管理作为根 ChainDescriptor 一部分的节点对象。
基本上它如下所示:
class ChainDescriptor
{
public:
~ChainDescriptor()
{
//delete the nodes in nodes...
}
void addNode(Node *);
Node * getNode();
const std::list<Node *>& getNodes() const;
std::list<Node *> m_nodes;
};
class Node
{
public:
Node(Node *parent);
void addChild(Node *node);
Node * getChild(const std::string& nodeName);
private:
Node * m_parent;
std::list<Node*> m_childs;
};
ChainDescriptor 类拥有所有节点并负责删除它们。但是这些类现在需要在另一个程序中使用,一个具有撤消/重做功能的 GUI,具有“所有权”的问题。在深入修改现有代码之前,我正在考虑不同的解决方案:
- 使用
shared_ptr
和各自list<shared_ptr<...> >
- 使用
weak_ptr
和各自list<weak_ptr<...> >
在上面的示例中,我真的不知道在哪里使用shared_ptr
和weak_ptr
正确使用。
有什么建议吗?