我的复制构造函数遇到不稳定的问题。
我有一个 MyData 类,如下所示:
class MyData
{
private:
std::vector<double> wavelength;
std::vector<double> amplitude;
public:
MyData::MyData(void) {}
MyData::MyData(const MyData &cSource)
: wavelength(cSource.wavelength), amplitude(cSource.amplitude)
{}
}
在我的主程序中,我将 MyData 对象插入到环形缓冲区中。这就是我在 main 中读它的方式:
MyData data;
data = removeq(&q);
问题是有时复制的数据会丢失某些值。等等,如果波长的原始大小是1,复制的数据显示0。我已经调试了我的程序,环形缓冲区中的数据是正确的,等等它显示了正确的大小1。
有人知道我的复制构造函数是否错误或者我是否需要赋值运算符重载?
谢谢!
我用于插入/删除环形缓冲区的代码:
void insertq(struct queue *p, MyData v)
{
int t;
t = (p->rear+1)%MAX;
if(t == p->front)
{ }
else
{
p->rear = t;
p->arr[p->rear] = v;
}
}
MyData removeq(struct queue *p)
{
MyData empty;
if(isempty(p))
{
return empty;
}
else
{
p->front = (p->front + 1)%MAX;
empty = p->arr[p->front];
return empty;
}
}
最佳答案
为了调用复制构造函数,您必须在同一行中声明并初始化您的对象(使用另一个对象)。您当前的代码实际上调用了重载的 = 运算符。
关于C++ 类的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459412/