2012-04-19 5 views
1
element* elements = new element[size.x]; 

이렇게하면 기본 생성자로 X 요소가 작성됩니다. 내 프로그램 동안, 나는 다음과 같이 서로 다른 생성자 매개 변수를 사용하여 각 요소를 구성하고 싶습니다 :배열 요소의 기본 구성 방지

for(int i=0; i < size.x; ++i) 
    elements[i] = element(i); 

어느 방지 방법 및 불필요한 기본 instanciation (I 구현 싶지 않아)과 불필요한 칼레가 있는가 ~ Operator=?

+1

'std :: vector '을 사용할 수없는 이유가 있나요? ('push_back' 또는'emplace_back'을 사용하여) 이것을 할 수 있습니까? – ildjarn

+0

아무 이유없이, 그것은 호기심에서 벗어났습니다. 왜 벡터에 emplace_back 함께 할 수 있지만 배열 상응하는 해당 이해할 수 없다. – lezebulon

+0

글쎄'표준 :: 벡터 <>'그것을 할 수 있으므로 분명히 가능합니다 ...; -] – ildjarn

답변

1

는이

을 달성하기 위해 이중 포인터를 사용할 수 있습니다
element ** elements = new element * [size.x]; 

for(int i=0; i < size.x; ++i) 
    elements[i] = new element(i); 
0

글쎄, 이것이 정말로 당신에게 문제가된다면, 배열을 사용하지 마십시오. 기본 생성자와 함께 std::vector을 사용하십시오.

명시 적 벡터 (const 할당 자 & = 할당 자()); 기본 생성자 : 내용이없고 크기가 0 인 빈 벡터를 생성합니다.

0

당신은 은 중괄호 이니셜로, 일반적으로 직선의 위치에서 건설에게 최적화됩니다 -initialize 자동 배열을 복사 할 수 있지만, 동적 배열이 작동하지 않습니다

elements e[] = { elements(1,2,3), elements(), elements('a', true) }; 

. C++ 11에서 당신은 초기화 목록을 지정할 수 있습니다,하지만 너무 복사 초기화, 직접적인 초기화이다 : 그것은 당신의 디자인을 다치게하지 않는 경우

elements * e = new elements[2] { elements(1,2,3), elements('a', true) };