diff --git a/datatype/TreeTest.cpp b/datatype/TreeTest.cpp index 4eec53d..2cb084f 100644 --- a/datatype/TreeTest.cpp +++ b/datatype/TreeTest.cpp @@ -39,33 +39,28 @@ class FolderNode:public TreeNode public: using TreeNode::TreeNode; + ~FolderNode()=default; - void OnAttachParent(TreeBaseNode *node) override + void OnAttachParent(TreeNode *node) override { - TreeNode::OnAttachParent(node); - - TreeNode *pn=(TreeNode *)node; - - std::cout<<(*pn)->GetPath()<<"\\"<<(*this)->GetPath()<GetPath()<<"\\"<<(*this)->GetPath()<::OnDetachParent(node); + TreeNode *node=GetParent(); - TreeNode *pn=(TreeNode *)node; - - std::cout<<"remove "<<(*this)->GetPath()<<" from "<<(*pn)->GetPath()<GetPath()<<" from "<<(*node)->GetPath()<; + using FolderManager=DataNodeManager; FolderManager manager; - auto *root=manager.Create(); + FolderNode *root=manager.Create(); (*root)->SetPath("root"); @@ -80,7 +75,11 @@ int main(int,char **) (*linux)->SetPath("linux"); root->AttachChild(linux); - delete linux; //手动释放 + delete linux; //手动释放,这里不会产生FolderNode::OnDetachParent是正常现像。 + //因为在完成FolderNode::~FolderNode后,虚拟函数的关系已回退到上一级,所以这一级的已经无效,所以无法产生调用。 + //如果要实现调用,必须在FolderNode::~FolderNode调用DetachAll() + + //这个问题我们可能需要调研,如要完全解决可能需要屏蔽delete操作符的使用,只允许使用Destory } //自动释放到可以了,但是释放顺序需要处理下