gpt4 book ai didi

c++ - 对何时调用嵌入式对象的复制构造函数感到困惑

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:13 25 4
gpt4 key购买 nike

class WithCC { 
public:
WithCC() {}
WithCC(const WithCC&) {
cout << "in WithCC's copy constructor" << endl;
}
};


class Composite {
WithCC withcc; // Embedded objects
public:
Composite() {}
};

int main() {
Composite c;
Composite c2 = c;
}

使用上面的代码,withcc 的复制构造函数被调用,我得到了输出:在 WithCC 的复制构造函数中

但是如果我像这样向 Composite 添加一个复制构造函数...

class Composite {
WithCC withcc; // Embedded objects
public:
Composite() {}
Composite(const Composite&) {
cout << "in composite's copy constructor" << endl;
}
};

withcc 的复制构造函数似乎没有被调用,因为输出是:在复合的复制构造函数中

这里为什么不调用withcc的拷贝构造函数?

最佳答案

在第一个示例中,您省略了 Composite 的复制构造函数,因此 C++ 为您生成了一个默认构造函数。这个默认的本质上是一个字段一个字段地运行拷贝,因此运行 WithCC 的拷贝构造函数。

当您显式定义一个复制构造函数时,C++ 不会施展魔法。您可以根据需要复制字段。例如

Composite(const Composite& other) : withcc(other.withcc) {
cout << "in composite's copy constructor" << endl;
}

关于c++ - 对何时调用嵌入式对象的复制构造函数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com