【发布时间】:2019-12-04 21:58:36
【问题描述】:
在 C++ 中搞乱类,遇到一个错误,指出我试图引用已删除的函数。这是错误
C2280(Test &Test::operator = (const Test& : 试图引用已删除的函数)。
这是我的代码:
#include "pch.h"
#include <iostream>
using namespace std;
class Test {
public:
int size;
double* array;
public:
Test();
Test& operator=(Test&& a);
Test(int sizeArg) {
size = sizeArg;
array = new double[size];
}
Test(Test&& arg) {
size = arg.size;
array = arg.array;
arg.size = 0;
arg.array = nullptr;
}
~Test()
{
if (array != nullptr) {
delete[]array;
}
}
};
int main()
{
Test outTest;
int x = 1;
//Wont work since looking for a deleted function
if (x = 1) {
Test arg(200000000);
outTest = arg;
}
cout << outTest.array;
}
问题出在等号上的main()。
【问题讨论】:
-
Test& operator=(Test&& a);你声明了赋值运算符,但从未实现它... -
您的意思是在
main()中写if (x == 1)吗?=是赋值运算符,==是比较运算符。 -
您没有复制构造函数,也没有赋值运算符。声明移动构造函数会使它们默认被删除。或者
outTest = std::move(arg) -
if (array != nullptr) {毫无意义。只需delete[] array;。 -
gcc 和 clang 告诉你函数被删除的原因。 MSVC 不这样做吗?
标签: c++ deleted-functions