2016-12-06 1 views
-1

C++의 클래스 내에 클래스 객체의 동적 배열을 만드는 데 문제가 있습니다. 개념은 다음과 같습니다. 우리는 클래스 A를 가지고 있다고 가정합니다.이 클래스에서는 동일한 유형의 클래스 (예 : A * 배열)의 객체 배열을 가지려고합니다.이 객체의 메모리는 동적으로 할당됩니다 (우리는 처음에이 배열의 크기). main()에서 2 개의 객체 배열을 만들고 싶습니다. 첫 번째 클래스에는 A 클래스의 세 요소가있는 배열이 있고 두 번째 요소에는 여섯 요소가있는 배열이 있습니다. 따라서 모든 객체는 고유 한 배열을가집니다. 여기에 내 생각은 다음과 같습니다C++에서 클래스 내부에 클래스 객체의 동적 배열을 만듭니다.

기본 개념 :

class A { 
    A* array; 
    public: 
    A(int k) { 
     //array = new A[k]; //this doesn't work because it calls the default constructor. 
     int i; 
     for (i = 0; i < k; i++) 
     array = new A(k); //This doesn't work either. 
     cout << "A created." << endl; 
    }; 
    ~A() { 
     cout << "Destroying A!" << endl; 
    } 
}; 

int main() { 
    A *ar[2]; 
    for (i = 0; i < 2; i++) { 
    if(i == 0) { 
     ar[i] = new A(3); 
    } else { 
     ar[i] = new A(6); 
    } 
    } 
    return 0; 
} 

|_|_|_| //Array with 3 elements of class A in object A 

| _____ |_|_|_|_|_|_| //Array with 6 elements of class A in object B 
| | 
|A||B| //Basic array with 2 elements 


미리 감사드립니다. 당신이 배열을 사용해야하는 경우

+2

'std :: vector 'period를 사용하십시오! –

+0

해답을 보내 주셔서 감사합니다. 벡터가 최상의 구현이지만이 프로젝트는 사용이 허가되지 않은 프로젝트입니다. – Vkt678

+0

'std :: vector'는 무한 재귀 문제를 해결하지 못합니다. 둥지를 어디에서 멈출 수 있습니까? –

답변

0

당신은 변수가 될 것입니다 그래서 당신은

A * arr = new A[k]; 

크기를 할 것 동적으로 하나가

type * name = new type[size]; 

입니다 선언하는 구문을 표준 : : 벡터를 사용하지만,해야 당신은 커다란 고통 인 자신의 grow() 함수를 만들어 성장할 필요가있을 때마다 배열의 크기를 조정해야합니다. 그냥 벡터를 사용하십시오!

EDIT : 프로그램에 iwth memory leaks도로드됩니다. 벡터는 자동으로 이들을 habdle하지만 배열을 만들기 위해 new를 사용할 때마다 배열을 삭제해야합니다.

delete [] name; 
관련 문제