내 복사본 생성자에 이상한 문제가 있습니다. 다음과 같이C++ 클래스 복사 생성자
내가 수업을 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로는 링 버퍼에 객체. 이것이 내가 처음에 다시 읽는 방법입니다 :
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
여기에 명시 적으로 copy ctor를 쓸 필요가 없으며, 기본 ctor는 동일한 작업을 수행합니다. –
할당 오버로드를 추가하려고 했습니까? 쓰기 및 테스트에는 불과 1-2 분이 걸립니다. 복사 생성자가 정상적으로 보입니다. 관련 코드를 더 게시하면 도움이 될 수 있습니다. – fileoffset