我有我的複製構造函數不穩定的問題。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