gpt4 book ai didi

c++ - 强制编译器在未使用基类删除的复制构造函数定义的移动构造函数上发出错误

转载 作者:行者123 更新时间:2023-11-28 01:26:09 26 4
gpt4 key购买 nike

考虑这样一个防止复制构造和复制赋值的基类:

class NonCopyable {
public:
NonCopyable() = default;
~NonCopyable() = default;

NonCopyable(NonCopyable const&) = delete;
NonCopyable& operator=(NonCopyable const&) = delete;
};

我们的开发人员现在可以包含此类,并使用它来禁用继承类的复制,如下所示:

class CopyTest : public NonCopyable {
public:
CopyTest() {
std::cout << "copy test created" << std::endl;
}

~CopyTest() {
std::cout << "copy test deleted" << std::endl;
}
};

当我尝试使用 CopyTest 类时:

CopyTest ct, ct1(ct);

CopyTest ct;
CopyTest ct1 = ct2;

编译器发出错误:use of deleted function xxx(其中 xxx 是我删除的复制构造函数或复制运算符)

然后,如果我想std::move一个CopyTest对象:

CopyTest ct;
CopyTest ct1 = std::move(ct);

编译器发出相同的错误(使用已删除的函数 xxx - 其中 xxx 仍然是我的复制构造函数或赋值运算符)。

如果我没记错的话,那是因为开发者没有定义正确的移动函数/赋值运算符。

是否可以强制编译器告诉 CopyTest 类的开发人员移动错误在这里是因为他没有定义正确的移动构造函数/赋值运算符,而不是因为复制构造函数/赋值运算符在基类上被删除了吗?

平台:
Debian 9
海湾合作委员会 6.3.0

编译标志:-fpermissive -ggdb -std=c++11

最佳答案

添加

    NonCopyable(NonCopyable &&)                 = delete;
NonCopyable& operator=(NonCopyable &&) = delete;

现在提示基类 move ctor 被删除。

关于c++ - 强制编译器在未使用基类删除的复制构造函数定义的移动构造函数上发出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53747179/

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