Re: copy construct
On 9 Aug, 14:51, Jens Schmidt <Jens.Schmidt...@gmx.de> wrote:
exergy wrote:
Hello, if I have a class like this:
class Node{
private:
int x;
Node* parent;
public:
Node(const Node& N)
{
......
}
Node& operator =(const Node& n)
{
......
}
~Node()
{
.....
}
// other member functions
}
How do I make a copy of private field Node* parent itself? I read some
references online, some use "new" operator to allocate dynamic memory,
so what I did was
Node(const Node& p)
{
x=p.x;
Node temp=*(p.parent)
parent=new node(temp);
}
However, x value was copied, not the parent pointer.
anyone can help?
You first have to decide if you want a shallow copy or a deep copy of your
Node. For a shallow copy, a simple assignment of parent=p.parent is
sufficient. For a deep copy, your code has to be modified so that all
parents are copied, but not more. Currently, you ignore that the parent
field may be NULL. Code like
Node(const Node& p)
{
x=p.x;
if (p.parent)
parent=new Node(*(p.parent));
else
parent=0;
}
As it stands, without parent to child pointers and code to copy them,
this would seem to make no sense at all under any interpretation of
"copy".
Assuming that a parent can have multiple children (seems reasonable to
me otherwise you've got a list), You will get neither a cloned Node
nor a cloned tree nor even a cloned subtree. Consider:
r -+- a
|
+- b -+- c -+- d
| |
| +- e
+- f
Copying c according to the given Node class and copy constructor would
give you:
r2 - b2 - c2 !!!
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]