我正在寫一個樹狀的容器,其中每個「節點」與分支機構/子樹列表,目前我的頭看起來像:移動語義和引用語義
class _tree {
public:
typedef _tree* tree_ptr;
typedef std::list<_tree> _subTreeTy;
explicit _tree(const _ValTy& v, const _NameTy& n); //create a new tree
_tree(const _ValTy& v, const _NameTy& n, tree_ptr _root);
//create a new tree and add it as branch to "_root".
~_tree();
void add_branch(const _tree& branch); //add by copy
void add_branch(_tree&& branch); //add by move
private:
_subTreeTy subtrees;
_ValTy value;
_NameTy name;
};
_tree::_tree(const _ValTy& v, const _NameTy& n, tree_ptr _root)
: root(_root),
value(v),
name(n)
{
_root->add_branch(*this); //not rvalue(???)
}
現在第二個構造函數創建內_root
一棵樹 - 但是如何與調用該作品(忽略私有違規):
_tree Base(0,"base");
_tree Branch(1, "branch", &Base);
Base.subtrees.begin()->value = 8;
std::cout << Branch.value;
我將如何讓這個Branch
& *Base.subtrees.begin()
指同一個節點?或者我應該走另一條路。使用add_branch()
來創建分支/子樹?
以下劃線開頭並帶有大寫字母的標識符被保留用於實現。而且看起來很醜。 –
它與移動語義有什麼關係? – crazyjul
我冒昧地改變了標題,因爲它沒有很多信息(還有其他一些小的變化)。希望這仍能傳達你的問題。 –