C++复制构造函数几种特殊情况

kyaa111 3年前 ⋅ 764 阅读

int main() {
    Test cc;
    //会调用拷贝构造函数 将cc赋值给dd, 因为dd不存在(没有初始化), 所以需要调用拷贝构造函数进行初始化
    Test dd = cc;
    cout << &cc << endl;
    cout << &dd << endl;
}

output

copy
00FFFE40
00FFFE30

int main() {
    Test cc;
    Test dd;
    //不会调用拷贝构造函数, 因为dd存在, 所以不需要调用拷贝构造函数进行初始化
    dd = cc;
    cout << &cc << endl;
    cout << &dd << endl;
}

output

00B3FD9C
00B3FDAC

有一点不同于Java, C++中对象不能为空,只有指针可以

Test c() {
    Test t;
    //会调用拷贝构造函数, 因为不能返回栈内变量, 需要返回新对象给调用者
    return t;
}

int main() {
    Test cc = c();    
}

output

copy