2

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

给定 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?

4

0 回答 0