我想弄清楚如何更好地组织我的代码,所以我做了一个代表问题的简单示例:
鉴于ClassA和ClassB:
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());
产生输出:
ClassA ctor
Test3的
ClassA析构函数
虽然这段代码没有:
ClassB b(ClassA());
在这种情况下,甚至没有执行ClassB构造函数(尽管也没有抛出错误)。
有没有办法在按值传递参数时避免复制ctor?