更新TreeTest

This commit is contained in:
hyzboy 2025-05-04 19:29:00 +08:00
parent 20d5e945c9
commit 7b3e24a000

View File

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