gpt4 book ai didi

c++ - 如何取消删除子类中的构造函数?

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

所以在我们的代码库中有这个结构:

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

最佳答案

未删除的默认复制对象通过依次复制每个基础和成员来工作。它依赖于那些基础复制 c'tors 来完成这项工作。如果不存在,它就无法选择任何有意义的操作来代替。

基类不可复制,这是其不变量的一部分,您不能强制编译器撤消它。您唯一的选择就是自己实现复制代码。在这种情况下,只有程序员才能选择有意义的语义。

复制分配也是如此。

关于c++ - 如何取消删除子类中的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57899802/

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