以下是代码,但我不知道如何去除它。有人能帮助我吗?
#include <iostream>
using namespace std;
class CSample
{
int *x;
int N;
public:
//dafualt constructor
CSample(): x(NULL)
{}
void AllocateX(int N)
{
this->N = N;
x = new int[this->N];
}
int GetX()
{
return x;
}
~CSample()
{
delete []x;
}
};
int main()
{
CSample ob1; //Default constructor is called.
ob1.AllocateX(10);
//problem with this line
CSample ob2 = ob1; //default copy constructor called.
CSample ob3; //Default constructor called.
//problem with this line
ob3 = ob1; //default overloaded = operator function called.
}
答案 0 :(得分:1)
此方法具有错误的签名
int GetX()
{
return x;
}
应该是
int* GetX()
{
return x;
}
就您的作业而言,您需要一个副本分配运算符来说ob3 = ob1
,它看起来像
CSample& operator=(CSample& other)
{
N = other.N;
x = new int[N];
std::copy(other.x, other.x + other.N, x);
return *this;
}