因此,在我们的代码库中有以下结构:
struct NonCopyable
{
private:
NonCopyable(const NonCopyable &) = delete;
NonCopyable &operator=(const NonCopyable &) = delete;
};
以及从中继承的结构:
struct Foo : NonCopyable {
}
现在,我如何制作一个从继承Foo
但可复制的结构?
尝试了一下,但没有成功:
struct CopyableFoo : Foo {
CopyableFoo (const CopyableFoo &) = default;
CopyableFoo &operator=(const CopyableFoo &) = default;
}
我最终要实现的目标是编译良好:
CopyableFoo foo;
auto bar = foo; // copy works
未删除的默认副本文件将通过依次复制每个库和成员来工作。它依靠这些基础复制者来完成这项工作。如果不存在,则无法选择任何有意义的动作来代替。
基类是不可复制的,这是其不变式的一部分,您不能强制编译器撤消该操作。您唯一的选择是自己实现复制。在这种情况下,只有程序员才能选择有意义的语义。
复制分配也是如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句