我有我的复制构造函数不稳定的问题。C++类复制构造函数
我有一个类迈德特如下:
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的对象合并为一个环形缓冲区。这是我如何读回它主要:
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;
}
}
复制构造函数没问题(它与编译器自动生成的一样,btw)。问题在于'removeq()'及其设计 - 你如何期望在已经构建的对象上调用复制构造函数?向我们展示如何在'removeq'中使用复制构造函数。 – Cameron 2012-02-27 02:44:47
你不需要在这里明确地写出copy ctor,默认的会做同样的事情。 – 2012-02-27 02:50:05
您是否尝试添加赋值超载?编写和测试只需一两分钟。复制构造函数看起来OK。如果您发布更多相关代码,这可能会有所帮助。 – fileoffset 2012-02-27 02:54:09