힙에 메모리를 할당 한 컨테이너를 구현하려고하지만 기본 생성자와 인수 생성자가 서로를 좋아하지 않는 것처럼 보입니다. 아래, 아무것도 주석없이 코드를 게시했습니다. 그대로 서서 충돌합니다. 그러나복사 생성자 및 할당 연산자에서 개인 배열 삭제
#include <iostream>
using namespace std;
class foo
{
public:
foo() {size=1; vals = new double[1]; vals[0]=0;}
~foo() {delete[] vals;}
foo(const foo& other)
{
size=other.getsize();
delete[] vals;
vals = new double[size];
for(long unsigned i=0; i<size; i++)
vals[i]=other[i];
}
foo& operator=(const foo& other)
{
size=other.getsize();
delete[] vals;
vals = new double[size];
for(long unsigned i=0; i<size; i++)
vals[i]=other[i];
return *this;
}
foo(double* invals, long unsigned insize)
{
size=insize;
delete[] vals;
vals = new double[size];
for(long unsigned i=0; i<size; i++)
vals[i]=invals[i];
}
double operator[](long unsigned i) const {return vals[i];}
long unsigned getsize() const {return size;}
private:
double* vals;
long unsigned size;
};
int main()
{
double bar[3] = {5,2,8};
foo B(bar, 3);
cout<< B[0]<< " "<< B[1]<< " "<< B[2]<<endl; //couts fine
foo A; //crashes here
return 0;
}
, 내가 될 주요 변경 : 그것은 잘 실행
int main()
{
double bar[3] = {5,2,8};
foo B(bar, 3);
cout<< B[0]<< " "<< B[1]<< " "<< B[2]<<endl; //couts fine
foo A(); //works now
return 0;
}
. 그러나 foo가 함수라고 생각하기 때문에 A = B를 대입 할 수 없습니다.
그때 아무것도 보이지 않으면 '삭제'를 사용하고 싶다면 필요에 따라 삭제 연산자를 오버로드해야합니다. 그 시간에 해당 생성자가 호출 될 때 아무 것도 없기 때문에 문제가 될 수 있습니다. 너의 충돌에 .. – goodies