请考虑以下代码:
#include <iostream>
using namespace std;
class A {
public:
A() = default;
A(const A& rhs) {
cout << "Copy was made!" << endl;
}
};
class B {
public:
A data;
int foo;
B(A data, int foo) : data(data), foo(foo) {
}
};
int main() {
A data;
B foo(data, 10);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印出:
复制了!
复制了!
是的,它是正确的,它复制两次!
当我们传递data给B's构造函数时,第一个副本发生.当我们data从构造函数复制到memeber变量时,第二个副本就会发生.
我们知道我们不能复制1份(除非我们去heap & pointers).那么为什么我们不总是写:
B (const A& data, const int& foo, const SomeOtherType& …