Re: Operator New help
the code in the OP has a number of inconsistantcies.
john wrote:
Hey guys,
Quick question i have this code and what i want to do is create a deep
copy of class B. Now I tried doing this with the new operator and
pointers. Here's is the orignal
---------------- Original Copy-----------------------
#include <iostream>
using namespace std;
class A
{
int n ;
public:
A():n(0)
The line above is valid - this is better:
A():n()
{
}
A(int x):n(x)
{
n = x;
why make an assignment to what you already initialized it to ?
}
void print()
{ cout << n<<"\n\n";
}
Why provide your own copy constructor ? Is not the one provided by the
compiler good enough here ?
A(const A& objectCopy){
n = objectCopy.n; // copy constructor
}
};
class B
{
A * a;
public:
B(A & x)
{
a = &x; // Here is the problem so I implemented a new
command
}
void print ()
{
a->print();
}
B(const B& copy){ // Class B copy constructor
a = copy.a;
the line above does not make a copy of the object.
}
const B &operator=(const B x){
a = x.a; // Operator
}
B::~B(){
delete a;
if you delete - make sure you have a correspoinding new.
}
};
int main()
{
A a(5);
A a1(7);
a1.print();
B b(a1);
b.print();
B c(a);
b.print();
b = c;
b.print();
cout << endl;
int trick;
cin >> trick;
return 0;
}
//--------------------End of Orignal Copy-----------------------
----Version altered with new command in class B--------
#include <iostream>
using namespace std;
class A
{
.... see earlier commens
};
class B
{
A * a;
public:
B(A & x)
B( const A & x )
{
a = new A(x); //New command
better
}
void print ()
{
a->print();
}
B(const B& copy){ // Class B copy constructor
a = copy.a;
// try this one
B(const B& copy) a( new A(* copy.a) ){}
}
const B &operator=(const B x){
a = x.a; // Operator
delete a;
a = new A(* copy.a);
}
B::~B(){
delete a;
}
};
int main()
{
A a(5);
A a1(7);
a1.print();
B b(a1);
b.print();
B c(a);
b.print();
b = c;
b.print();
cout << endl;
int trick;
cin >> trick;
return 0;
}
//---------------------------------------------------------------------
Works fine but say if i change main() so it looks like this
------------------ Aletered main -----------------
int main()
{
A a(5);
B b = a;
{
A a1 (7);
B b1 =a1;
b = b1;
}
b.print();
cout << endl;
int trick;
cin >> trick;
return 0;
}
--------------------- End of altered main--------------------
I get a bunch of junk so I found out i need to make a deep copy of B.
That's expected....
....
any help would be appreciated.
Hope it helps...