我写了以下玩具示例
#include <iostream>
using namespace std;
struct A {
A() { cerr << "default" << endl; }
A(const A &a) { cerr << "copy" << endl; }
A(A &&a) { cerr << "move" << endl; }
};
struct B {
A a;
};
struct C {
A a;
C(A a): a(a) {}
};
int main() {
B b {A()};
cerr << "=======" << endl;
C c {A()};
return 0;
}
编译并运行它给出:
default
=======
default
copy
我们可以看到
C
的构造函数创建了一个副本,而 B
的构造不需要副本。
我无法通过在 struct
B
中定义我自己的构造函数来重现 C
的行为。例如,将 C(A a): a(a) {}
替换为 C(A a): a(forward<A>(a)) {}
会创建一个移动。
有没有办法创建一个模仿
B
默认构造函数行为的构造函数?
您可能想要:
struct C {
A a;
C(A const &a): a(a) {}
};