我在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
    // ...
};

作者试图说明拷贝 Controller 和拷贝分配之间的不匹配,但是我想知道代码是否存在其他缺陷。

“深度复制”构造函数有意义吗?看起来像进入正文时,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/

10-11 04:08