2014-09-17 2 views
0

검색 및 검색했지만 혼동을 실제로 없애지 못했습니다.힙에있는 객체와 하위 객체의 고정 크기 배열

나는 예를 들어, 그리드를 대표하는 두 개의 수업을 해요 :

class Term { 
    ... 
}; 

class GridPoint{ 
    Term a; 
    Term b; 
    Term c; 
    ... 
}; 

내가 배열의 각 요소는 GridPoint 인 힙에 큰, 고정 된 크기의 배열을 가지고 싶습니다 , 자체적으로 여러 개의 용어가 포함되어 있습니다. 그러나

, 다음 예제는 컴파일되지 않습니다 :

GridPoint* pGrid = new GridPoint[100][100]; 

를 GCC에 따르면

error: cannot convert ‘GridPoint (*)[100]’ to ‘GridPoint*’ in initialization

+0

'auto * pGrid = new GridPoint [100] [100]; ' –

답변

0

먼저 내가 ++ 현대 C에서 newdelete를 사용 하지을 제안하고 싶습니다 대신 사용 스마트 포인터 또는 이것을 캡슐화하는 표준 라이브러리의 컨테이너 std::vector.

std::array<std::array<GridPoint, 100>, 100> pGrid; 
: 단순히 std::array 또는 std::vector를 사용

GridPoint** pGrid = new GridPoint*[100]; 
for (std::size_t i = 0; i != 100; ++i) { 
    pGrid[i] = new GridPoint[100]; 
} 

// Do something... 

for (std::size_t i = 0; i != 100; ++i) { 
    delete[] pGrid[i]; 
} 
delete[] pGrid; 

을 더 나은 대안을 위해 : 말했다되고 그건

, 당신은과 같이 루프에서 배열의 배열을 초기화 할 필요가 작동하도록 예를 얻을 수 있습니다

참고 :std::array은 데이터를 저장하는 데 사용하는 정적 배열을 캡슐화합니다. 즉, std::array 개체에 자동 저장 기간을 할당하면 이 아닌이 동적으로 할당됩니다 (데이터는 "힙"에 포함되지 않음).

std::vector 그러나 동적 할당을 사용하여 데이터를 저장합니다.

+0

'std :: array'는 "힙에"없다. –

+0

@MattMcNabb 네가 맞다. 나는'std : : array' 사용법은 원시 메모리 할당 구문을 사용하는 것과는 대조적으로 단순함을 보여줍니다. – Snps

+0

-1 처음에'new []'와'delete []'를 나타 내기 위해. – Puppy