我试图弄清楚如何更好地组织我的代码,所以我做了一个简单的例子来代表这个问题:
给定 A 类和 B 类:
class ClassA
{
public:
ClassA() { cout << "ClassA ctor\n"; }
ClassA(const ClassA &other) { cout << "ClassA copy ctor\n"; }
ClassA& operator=(ClassA other) {
cout << "ClassA assignment\n";
return *this;
}
~ClassA() { cout << "ClassA destructor\n"; }
};
class ClassB {
ClassA mA;
public:
ClassB(ClassA a) : mA(a) {
cout << "ClassB ctor\n";
}
~ClassB() { cout << "ClassB destructor\n"; }
};
有人可以解释一下这段代码是否可以工作:
void test3(ClassA pA) { cout << "Test3\n"; }
...
test3(ClassA());
产生输出:
类Actor
测试3
A 类析构函数
虽然此代码没有:
ClassB b(ClassA());
在这种情况下,甚至没有执行 ClassB 构造函数(尽管也没有引发错误)。
将参数按值传递给ctor时,有没有办法避免复制ctor?