何时是在c ++中调用的复制构造函数,当我将对象分配给另一个对象时是不是它被调用了?

mur*_*ish -1 c++ copy-constructor

class Myinteger(){
    public:
      Myinteger( int len );             // simple constructor
      Myinteger( const Myinteger &obj);  // copy constructor
      ~Myinteger();                      // destructor
    private:
      int *ptr;   
}

Myinteger::Myinteger(const Myinteger &obj) {
  cout << "Copy constructor allocating ptr." << endl;
  ptr = new int;
  *ptr = *obj.ptr; // copy the value
}

int main(){
   Myinteger obj1(10);
   Myinteger obj2(20);
   obj1=obj2;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

将obj2分配给obj1时不调用复制构造函数,我确认它是"复制构造函数分配ptr".没有打印到控制台,

因此,如果在将obj2分配给obj1时,如果没有调用复制构造函数在上述情况下调用哪个方法,那么也要告诉在哪些情况下调用类的复制构造函数.

Cli*_*ick 7

复制构造函数,例如声明如下:

Myinteger(const Myinteger& other);
Run Code Online (Sandbox Code Playgroud)

也可以用作其中之一

Myinteger obj2 = obj1;
Run Code Online (Sandbox Code Playgroud)

要么

Myinteger obj2(obj1);
Run Code Online (Sandbox Code Playgroud)

但是赋值运算符,声明为:

Myinteger& operator =(const Myinteger& other);
Run Code Online (Sandbox Code Playgroud)

将用于您的代码所在的位置

Myinteger obj2;
obj2 = obj1;
Run Code Online (Sandbox Code Playgroud)

这就是代码中的内容,因此调用赋值运算符,而不是复制构造函数.