使用ctor调用

时间:2015-07-04 23:05:53

标签: c++ most-vexing-parse

我想弄清楚如何更好地组织我的代码,所以我做了一个代表问题的简单示例:

鉴于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?

0 个答案:

没有答案