gpt4 book ai didi

c++ - 复制构造函数首先复制指针,然后取消引用它以获得 "deep"拷贝

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

我正在查看 http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c22-make-default-operations-consistent 中的以下(错误的)示例代码:

class Silly {   // BAD: Inconsistent copy operations
class Impl {
// ...
};
shared_ptr<Impl> p;
public:
Silly(const Silly& a) : p{a.p} { *p = *a.p; } // deep copy
Silly& operator=(const Silly& a) { p = a.p; } // shallow copy
// ...
};

作者试图说明复制 c'tor 和复制分配之间的不匹配,但我想知道代码是否在其他方面存在缺陷。

“深拷贝”构造函数有意义吗?看起来在进入正文时,p 将与 a.p 相同并且自赋值不执行任何操作(充其量)。

我错过了什么吗?

最佳答案

的确,那只是一堆废话。

大概这就是示例的重点,但我不认为这是一个很好的示例。

否则作者的意思可能是:

Silly(const Silly& a) : p{std::make_shared<Impl>()} { *p = *a.p; }

或:

Silly(const Silly& a) : p{std::make_shared<Impl>(*a.p)} {}

或者类似的东西。

关于c++ - 复制构造函数首先复制指针,然后取消引用它以获得 "deep"拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54054745/

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