拷贝构造函数和赋值函数

先举个栗子

class C {
public:
    C(){
        cout << "none argument constructor called" << endl;
    }
    
    C(int a):i(a) {
        cout << "constructor called" << endl;
    }
    
    C(const C& c) : i(c.i) {
        cout << "copy constructor called" << endl;
    }
    
    C& operator=(const C& c) {
        
        cout << "operator = called" << endl;
        
        if(this == &c){
            return *this;
        }
        
        i = c.i;
        return *this;
    }
    
    ~C(){
       cout << "destructor called" << endl;
    }
    
private:
    int i;
};

int main(){
    C c1(1);
    cout << "=======" << endl;
    
    C c2(c1);
    cout << "=======" << endl;
    
    C c3;
    c3 = c2;
    cout << "=======" << endl;
    
    C c4 = c3;
    
    return 0;
}

执行代码输出

constructor called
=======
copy constructor called
=======
none argument constructor called
operator = called
=======
copy constructor called
destructor called
destructor called
destructor called
destructor called
Program ended with exit code: 0

总结就是:

  1. 对象不存在,且没用别的对象来初始化,就调用了构造函数
  2. 对象不存在,且用别的对象来初始化,就是拷贝构造函数
  3. 对象存在,用别的对象来给它赋值,就是调用赋值函数
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容