Quote:
Originally Posted by chasseml
I have a class that has as a private data member a pointer of the same type.
E.g. The class is "ClassA" and has as a member "ClassA* _classA".
I am writing the copy constructor of ClassA, and would like to do a "deep copy"
of data member _classA, e.g.:
ClassA::ClassA(const ClassA& orig)
: _classA(NULL)
{
if (orig._classA != NULL)
{
_classA = new ClassA(*(orig._classA));
}
}
Is that allowed?
Thanks in advance, chasse
Why u are calling infinite time means Cyclic . You have do this functionality in some other ways.
If You wanna on stack , your code may be tackle like this
Code:
class ClassA
{
public:
void Initialize(ClassA);
ClassA()
{
cout<<"ctor"<<endl;
}
ClassA(const ClassA &);
~ClassA() { cout<<"Dctor"<<endl;}
void Display() { cout<<"I am here"<<endl;}
private:
ClassA* _classA;
};
void ClassA :: Initialize(ClassA prev)
{
_classA = &prev;
}
ClassA::ClassA(const ClassA& orig)
: _classA(NULL)
{
cout<<"copy ctor"<<endl;
if (orig._classA != NULL)
{
this->_classA = (orig._classA) ;
}
}
int main()
{
ClassA obj1;
obj1.Initialize(obj1);
ClassA obj2(obj1);
//obj2.Display();
return 0;
}
If You wanna On heap then your code may like this...
Code:
class ClassA
{
public:
void Initialize(ClassA*);
ClassA()
{
cout<<"ctor"<<endl;
}
ClassA(const ClassA &);
~ClassA() { cout<<"Dctor"<<endl;}
void Display() { cout<<"I am here"<<endl;}
private:
ClassA* _classA;
};
void ClassA :: Initialize(ClassA* prev)
{
_classA = prev->_classA;
}
ClassA::ClassA(const ClassA& orig)
: _classA(NULL)
{
cout<<"copy ctor"<<endl;
if (orig._classA != NULL)
{
_classA = new ClassA();
this->_classA = (orig._classA) ;
}
}
int main()
{
ClassA* p1;
p1 = new ClassA();
p1->Initialize(p1);
ClassA obj2(*p1);
//obj2.Display();
return 0;
}
This is just an idea . second one itself has hole...Please take care your code and prevent your code from any hole.
Do as your requirement.