• C++ error: use of deleted function


    问题

    使用traits接收来自中间件的变量,调用拷贝构造函数时提示use of deleted function错误。

    解释

    仔细检查对应类中定义了移动构造函数,而没有显式定义拷贝构造函数。而问题就出在这:

    If the class definition does not explicitly declare a copy constructor, one is declared implicitly. If the class definition declares a move constructor or move assignment operator, the implicitly declared copy constructor is defined as deleted; otherwise, it is defined as defaulted.

    深究

    声明移动构造函数证明你的类需要深拷贝,对于包含指针的类,编译器简单的浅拷贝可能导致反复释放或野指针问题。推广至Copy constructor 、Move constructor 、Copy assignment operator 、Move assignment operator 、Destructor 这五个函数,定义了任何一个都会导致编译器认为你在主动管理资源,原本默认生成的函数可能无法满足需求甚至是错误的故被转换为delete强制用户手动实现,也就是rule of five规则。

    参考

    Copy constructors - cppreference.com

  • 相关阅读:
    api示例
    Windows+Ubuntu文件互传
    UI
    事件
    插件开发入门
    文摘
    刘海屏适配
    APT
    热修复
    进程保活
  • 原文地址:https://www.cnblogs.com/azureology/p/16069004.html
Copyright © 2020-2023  润新知