Attemptingtoreferenceadeletedfunctionusing*this
创始人
2024-09-21 21:30:36
0次

这个错误通常是由于试图调用一个已被删除的成员函数所引起的,通常是拷贝构造函数或拷贝赋值运算符。例如,如果一个类使用了C++11的“=delete”语法,来删除默认的拷贝构造函数和拷贝赋值运算符,则在尝试使用这些已被删除的函数时会出现这个错误。

为了解决这个问题,可以通过编写自定义的拷贝构造函数和拷贝赋值运算符,或者使用移动构造函数和移动赋值运算符来代替已被删除的函数。例如,以下示例代码演示了如何使用移动构造函数来解决这个问题:

#include 
#include 

class MyClass {
public:
    MyClass() : data(new std::vector()) {}
    ~MyClass() {}
    MyClass(const MyClass&) = delete; // 删除拷贝构造函数
    MyClass& operator=(const MyClass&) = delete; // 删除拷贝赋值运算符
    MyClass(MyClass&& other) : data(std::move(other.data)) {} // 移动构造函数
    MyClass& operator=(MyClass&& other) { // 移动赋值运算符
        data = std::move(other.data);
        return *this;
    }
private:
    std::unique_ptr> data;
};

int main() {
    MyClass a;
    //MyClass b(a); // 编译错误:无法调用已删除的函数‘MyClass::MyClass(const MyClass&)’
    //MyClass c = a; // 编译错误:无法调用已删除的函数‘MyClass::MyClass(const MyClass&)’
    MyClass d(std::move(a)); // 移动构造函数
    MyClass e;
    e = std::move(d); // 移动赋值运算符
    return 0;
}

需要注意的是,在通过移动构造函数和移动赋值运算符来代替已被删除的拷贝构造函数和拷贝赋值运算符时,需要确保使用了适当的头文件(如上例中的std::move和std::unique_ptr)。

相关内容

热门资讯

技巧知识分享!wepoker网... wepoker网页版透视方法AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏...
玩家必备教程!!wepoker... 『标题:当前标题』主打赛后复盘的 AI 游戏攻略黑科技走红,对局总结能力开挂。上传对局回放或者战绩截...
一分钟教会你!WPK德州局,德... AI 黑科技赛道又上新,这款智能处理工具堪称效率开挂,专门面向短视频创作者打造。它打通脚本撰写、AI...
技术分享!wepoker永久免... 一款 AI 游戏攻略黑科技工具上线,查攻略效率直接开挂。它整合版本更新、装备搭配、BOSS 打法、牌...
推荐一款!!德普辅助app,w... wepoker透视方法AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏攻略数...
一分钟揭秘!wpk辅助器是真的... 一分钟揭秘!wpk辅助器是真的吗,WPK有挂么辅助脚本(从来真的有辅助挂)主打本地运行的 AI 黑科...
一分钟了解!!wepoker透... 『标题:当前标题』主打赛后复盘的 AI 游戏攻略黑科技走红,对局总结能力开挂。上传对局回放或者战绩截...
信息共享!wpk俱乐部有没有辅... 信息共享!wpk俱乐部有没有辅助,德扑之星开挂透视教程工具(最初有辅助器)AI 智能体黑科技再上新,...
必胜教程!wepokerh5破... 必胜教程!wepokerh5破解,WPK透视软件下载(原来有辅助)主打本地运行的 AI 黑科技工具迎...
热点讨论!德普之星有透视辅助吗... 热点讨论!德普之星有透视辅助吗,德扑之星可以装挂吗工具(其实是有辅助器)AI 智能体黑科技再上新,自...