J'écris un récipient en forme d'arbre, où chaque « nœud » a une liste avec des branches/sous-arbres, actuellement ma tête ressemble à:Déplacer la sémantique et la sémantique de référence
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(???)
}
Maintenant, le deuxième constructeur créerait un arbre à l'intérieur _root
- mais comment cela fonctionne avec l'appel (ignorer violation privée):
_tree Base(0,"base");
_tree Branch(1, "branch", &Base);
Base.subtrees.begin()->value = 8;
std::cout << Branch.value;
Comment puis-je faire en sorte que Branch
& *Base.subtrees.begin()
se réfèrent au même noeud? Ou devrais-je aller dans l'autre sens. Utilisez add_branch()
pour créer une branche/sous-arbre?
Les identifiants qui commencent par un trait de soulignement suivi d'une lettre majuscule sont réservés pour l'implémentation. Et regarde moche. –
Qu'est-ce que cela a à voir avec la sémantique de déplacement? – crazyjul
J'ai pris la liberté de changer le titre un peu car il n'était pas très instructif (aussi d'autres changements mineurs). Espérons que cela transmet toujours ce que votre question est. –