在C ++中复制动态对象的构造函数

时间:2014-09-09 09:08:11

标签: c++ object dynamic copy-constructor

我想要一种关于复制构造函数的方法

class A {
    int *a;
   public :
        A():a(0){
                      a = new int;
                       *a =0;}
           A (const A & ob) {
            cout<<"In side copy constructor ..."<<endl;
            a = new int;
            *a = *ob.a;
           }
          ~A() {  cout <<"IN side destructor ..."<<endl;delete a;}
          void setdata(int ip) { *a = ip;}
          int getdata() { return *a;}
     };
int main() {
  A *dob1 = new A();
  dob1->setdata(5);
  A sob1= *dob1; //copy constructor gets called;

 //but for this case copy constructor will not be called
 // how should i write copy constructor for this case
  A *dob2 = dob1; //whether copy constructor will be called or not 

   cout<<endl;
      cout<<" dob1 data "<< dob1->getdata()<<endl;
        cout<<" sob1 data " << sob1.getdata()<<endl;
      cout<<" dob2 data "<< dob2->getdata()<<endl;

   delete dob1;
   return 0;
}

因此,对于这种情况,将调用如何创建复制构造函数。

请回复我。

1 个答案:

答案 0 :(得分:2)

A *dob2 = dob1;中,对象未被复制,指针为。

A*是完全不同的类型。指针dob2将指向dob1,但它本身不是对象,因此不要期望调用复制构造函数。

如果您A* dob2 = new A(dob1);将调用复制构造函数,将创建一个对象,dob2将指向它,但它仍然不是对象本身,而是指针。