1 c++ constructor class copy-constructor default-copy-constructor
这是我的代码。
当我删除第11行时,输出为
A(0)
B(0)
A(1)
Run Code Online (Sandbox Code Playgroud)
关于最后一行“ A(1)”,为什么要调用类A的第二个构造函数?
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A(0)" << endl; }
A(const A& a) { cout << "A(1)" << endl; }
};
class B {
public:
B() : a() { cout << "B(0)" << endl; }
// B(const B& b) { cout << "B(1)" << endl; }
private:
A a;
};
int main() {
B object1;
B object2 = object1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
A(0)
B(0)
A(1)
Run Code Online (Sandbox Code Playgroud)
什么时候
B(const B& b) { cout << "B(1)" << endl; }
Run Code Online (Sandbox Code Playgroud)
被注释/删除后,编译器会为您生成一个副本构造函数。提供的复制构造函数将复制该类的所有成员,因此在这种情况下,它将标记出一个看起来像
B(const B& copy) : a(copy.a) {}
Run Code Online (Sandbox Code Playgroud)
这就是为什么您看到a的副本构造函数被调用的原因。
不注释/删除时
B(const B& b) { cout << "B(1)" << endl; }
Run Code Online (Sandbox Code Playgroud)
您不进行复制a是因为您不要求这样做。编译器所做的是通过将构造函数转换为为其创建默认初始化
B(const B& b) : a() { cout << "B(1)" << endl; }
Run Code Online (Sandbox Code Playgroud)
因此将调用默认构造函数而不是复制构造函数。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |