Re: Doubts on type requirement for list/vector.
Amit Bhatia wrote:
Hi,
I am trying to implement a tree as follows (I am using namespace std):
node.h->>
class Node
{
// some stuff ctors, dtors, etc, BUT NO Default ctor;
Node &parent_node; // I want to avoid copying. ??
vector< list<Node>::iterator > child_nodes; // ??
};
Clearly a Node cannot declare another Node as one of its data members
(otherwise the Node class would be infinitely recursive - and
presumably require infinite storage). So each Node must hold either a
reference or a pointer to any other Nodes (such as its parent and child
nodes) with which it has a relationship. So there's no risk of copying
these other nodes by value (those concerns are unfounded). The question
really is which of the two "reference" forms that C++ offers (either a
pointer or a reference) is the better choice for Node's data members
that represent other Node objects.
Now, declaring Node's parent_node as a reference imposes two
restrictions on the class: it means that each Node object must have a
parent node - and that this parent node, once set, cannot be
subsequently changed to a different node. Well, since the Node objects
are to be arranged in a tree formation, there will necessarily have to
exist a "root" Node which will have no parent. Furthermore, it's likely
that the program may wish to move nodes, delete or otherwise edit this
tree - and none of these operations will be possible if each Node has a
data member reference to its parent that cannot be changed. So on those
two counts, it makes much more sense to declare Node pointers instead
of Node references as Node's data members.
Greg
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]