저는 항상 목록 유형 컨테이너가 필요할 때 객체를 저장하기 위해 벡터를 사용했습니다. 나는 객체 foo는 생성자 지금 포인터 배열에 생성자 전달
foo* p = new foo[5]()
을 가지고 있지 않은 경우
foo
의 생성자가 필요한 경우 어떤 C++ 03 일 다음과 같은 배열 pointers.The에 생성자를 전달할 수있는 방법을 알고 싶었
int
방법 것 위 문장에서 생성자를 전달합니까?
저는 항상 목록 유형 컨테이너가 필요할 때 객체를 저장하기 위해 벡터를 사용했습니다. 나는 객체 foo는 생성자 지금 포인터 배열에 생성자 전달
foo* p = new foo[5]()
을 가지고 있지 않은 경우
foo
의 생성자가 필요한 경우 어떤 C++ 03 일 다음과 같은 배열 pointers.The에 생성자를 전달할 수있는 방법을 알고 싶었
int
방법 것 위 문장에서 생성자를 전달합니까?
C++ (11) 때문에, 당신은 중괄호 이니셜 라이저를 사용할 수 있습니다
foo * p = new foo[5] { 1, 2, 3, 4, 5 }; // better: "auto p = ..."
이 foo
가 int
에서 암시 적으로 작도 것으로 가정합니다.
하지만 당신은 단지뿐만 아니라 사용할 수있는 용기 :
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});
불가능합니다. foo
인스턴스는 기본값으로 만 생성 될 수 있습니다.
UPDATE 1
경우 foo
다음 중 하나를 삭제 기능 또는 일치 ctor에 대한 사용에 대해 컴파일러 오류가 발생합니다 기본 생성자가 없습니다.
UPDATE 2
나는 다른 사람들이 C++ (11) 솔루션을 제공하는 것을 알 수있다. 내 대답은 C++ 03 또는 이전 버전에 대해서만 올바른 것으로 보입니다.
어떤 경우'foo'는 기본 생성자가없는? –
위의 명령문에서 생성자를 전달하는 방법은 무엇입니까?
new[]
에는 전달 생성자 매개 변수에 대한 양식이 없습니다.
대신 생성자를 직접 호출해야합니다.
foo* p = new foo[5]{ foo(1), foo(2), foo(3), foo(4), foo(5) };
'foo * p = 새로운 foo [5] {foo (1), foo (2), foo (3), foo (4), foo (5)}; 그것은'''foo' 클래스에 대한 기본 생성자가 없습니다. –
@ Casper_2211 C++ 03이 아니라 C++ 11을 사용하고 있다고 언급하면서 질문을 편집하는 것이 좋습니다. –
Ill 편집 내 질문 –
"암시 적 구성"알림이 필요했습니다. :) +1 –