2009-03-16 8 views
1

인사 모두. 나는 여기에 객체로 동적 배열을 처리하는 방법으로 몇 가지 experiance가 필요하다.오브젝트를 균등화 할 때 배열 복제

나는 여러 개체 '(OBJ1)'로 구성된 클래스 'SA'를했습니다, 'obj2보다'등 ... 나는 다음과 같은 방식으로 초기화 제가 동적 배열 'SA_Array'을 가지고있는 클래스 내에서

double * SA_Array; 
SA_Array = new double [size]; 

가 지금은 각 개체의 배열의 복사본을 만들 수 위의 개체에 '='연산자를 사용하려고 노력했습니다 크기는 길이를 설정하는 것을 특징으로하는 방법. Unfortunatly 나는 그것이 단지 포인터를 균등화하고 따라서 하나의 객체에서 배열을 수정하면 모든 객체 SA_Array가 동일하게 수정된다는 것을 깨달았습니다. 기본적으로 배열에 하나의 복사본 만 남겨 둡니다.

Obj1.SA_Array == Obj2.SA_Array ...

이 문제를 극복하고 SA_Array의 개체 별 복사본을 얻는 방법에 대한 좋은 제안이 있습니까?

답변

3

크기가 런타임에 결정되면, 가장 쉬운 하나를 사용하기는

vector<double> SA_Array(size); 

지금 당신은, 스왑, 복사 크기를 조정할 수있는 벡터이며 그에 따라 행동 할 것이다. begin에 대한 포인터가 필요하면 &SA_Array[0]을 사용하면됩니다. 크기가 결정 컴파일시에 고정되어있는 경우, 당신은 배열처럼 사용할 수 부스트 : : 배열을

boost::array<double, size> SA_Array; 

를 사용할 수 있지만, 또한 그것을 복사하고 벡터와 같은 SA_Array.begin() 같은 물건을 할 수 있습니다. 시작 포인터가 필요한 경우 SA_Array.data() 또는 &SA_Array[0]을 사용하면됩니다.

은 당신이 한도 같은 원시 포인터를 사용하여 수동으로

double *SA_Array; 
SA_Array = new double[size]; 

double *SA_Copy; 
SA_Copy = new double[size]; 
std::copy(SA_Array, SA_Array + size, SA_Copy); 

그것을 복사하는 방법이있다 그러나 당신이 벡터 당신을 위해 모든 것을 할 것이다, delete[]에 그들을 기억해야합니다으로는 복잡합니다.

0

std::vector<double>과 같은 표준 라이브러리 모음을 사용하거나 드문 경우지만 원시 배열이 필요할 때 예외 안전을 보장하도록주의하면서 복사 생성자를 작성할 수 있습니다.