2013-04-14 3 views
1

저는 항상 목록 유형 컨테이너가 필요할 때 객체를 저장하기 위해 벡터를 사용했습니다. 나는 객체 foo는 생성자 지금 포인터 배열에 생성자 전달

foo* p = new foo[5]() 
을 가지고 있지 않은 경우 foo의 생성자가 필요한 경우 어떤 C++ 03 일 다음과 같은 배열 pointers.The에 생성자를 전달할 수있는 방법을 알고 싶었 int 방법 것 위 문장에서 생성자를 전달합니까?

답변

3

C++ (11) 때문에, 당신은 중괄호 이니셜 라이저를 사용할 수 있습니다

foo * p = new foo[5] { 1, 2, 3, 4, 5 }; // better: "auto p = ..." 

fooint에서 암시 적으로 작도 것으로 가정합니다.

하지만 당신은 단지뿐만 아니라 사용할 수있는 용기 :

std::vector<foo> v { 1, 2, 3 }; 
std::list<foo> w { 1, 2, 3 }; 

아니면 :

std::unique_ptr<foo[]> q(new foo[4] { 1, 2, 3, 4}); 
+0

"암시 적 구성"알림이 필요했습니다. :) +1 –

3

불가능합니다. foo 인스턴스는 기본값으로 만 생성 될 수 있습니다.

UPDATE 1

경우 foo 다음 중 하나를 삭제 기능 또는 일치 ctor에 대한 사용에 대해 컴파일러 오류가 발생합니다 기본 생성자가 없습니다.

UPDATE 2

나는 다른 사람들이 C++ (11) 솔루션을 제공하는 것을 알 수있다. 내 대답은 C++ 03 또는 이전 버전에 대해서만 올바른 것으로 보입니다.

+0

어떤 경우'foo'는 기본 생성자가없는? –

1

위의 명령문에서 생성자를 전달하는 방법은 무엇입니까?

new[]에는 전달 생성자 매개 변수에 대한 양식이 없습니다.

대신 생성자를 직접 호출해야합니다.

foo* p = new foo[5]{ foo(1), foo(2), foo(3), foo(4), foo(5) }; 
+0

'foo * p = 새로운 foo [5] {foo (1), foo (2), foo (3), foo (4), foo (5)}; 그것은'''foo' 클래스에 대한 기본 생성자가 없습니다. –

+0

@ Casper_2211 C++ 03이 아니라 C++ 11을 사용하고 있다고 언급하면서 질문을 편집하는 것이 좋습니다. –

+0

Ill 편집 내 질문 –