【发布时间】:2014-07-05 09:31:59
【问题描述】:
IDE - 桌面版 Visual Studio Express 2013
C++11
问题 - 我有一个显然被复制的类(使用复制构造函数)。如果我这样声明复制构造函数:
MyClass(const MyClass&) = delete;
它抱怨对已删除函数的引用。我现在已经检查了我的整个代码两次,找不到类的实例将被复制到哪里。
有没有办法找到引用的来源?
我已经尝试定义复制构造函数,其中有一个断点,但它从未被命中。
更新
抱歉,它确实显示了引用的位置 - 在 STL 中的某个分配器中。我设法将其追踪到 std::vector::emplace_back() 调用 - 这必须导致副本。我会调查此事。
更新 2
我真是个笨蛋——我有一个 MyClass 的向量...
【问题讨论】:
-
那将是一个编译器错误,任何体面的编译器都会告诉你错误的确切来源。
-
您是否尝试过清理和重建项目?
-
搜索
MyClass x=y、MyClass x(y)和MyClass* x = new MyClass(y)。 -
为了增加您获得有意义答案的机会(并避免投反对票),请发布sscce.org,并复制粘贴您收到的整个编译器错误消息。如果您启用所有警告,重新编译,然后复制粘贴所有警告,那就更好了。
-
哦,还要检查您是发送到函数还是从函数返回
MyClass实例按值。我相信在这两种情况下都会隐式调用复制构造函数,以便在堆栈上复制该实例。
标签: c++ visual-c++ c++11 copy-constructor deleted-functions