2011-11-03 5 views
0

int를 허용하는 생성자가있는 간단한 클래스 MyClass이 주어지면 어떻게 에서 MyClass 배열을 초기화 할 수 있습니까?힙에있는 객체의 배열을 초기화하는 법

MyClass *classes[2] = { new MyClass(1, 2), 
         new MyClass(1, 2) }; 

시도한이 작동하지 않는 것 같습니다. 고맙습니다

+1

게시 한 코드가 컴파일됩니다. – Pubby

+0

배열이 스택에 있습니다. 힙에 포인터가 있습니다. –

+1

@MooingDuck : No : * 포인터 *가 스택에 있고 개체가 힙에 있습니다. –

답변

1

std::allocator<MyClass>을 사용하십시오.

std::allocator<MyClass> alloc; 
MyClass* ptr = alloc.allocate(2); //allocate 
for(int i=0; i<2; ++i) { 
    alloc.construct(ptr+i, MyClass(1, i)); //construct in C++03 
    //alloc.construct(ptr+i, 1, i); //construct in C++11 
} 

//use 

for(int i=0; i<2; ++i) { 
    alloc.destroy(ptr+i); //destruct 
} 
alloc.deallocate(ptr); //deallocate 

할당 한 모든 것을 구성 할 필요는 없습니다.

또는 더 나은 것은 단지 std::vector을 사용하는 것입니다.

[편집] 은 KerrekSB 간단로이 제안 :

MyClass** ptr = new MyClass*[3]; 
for(int i=0; i<4; ++i) 
    ptr[i] = new MyClass(1, i); 

//use 

for(int i=0; i<4; ++i) 
    delete ptr[i]; 
delete[] ptr; 

그것은 약간 느린 액세스,하지만 훨씬 사용하기 쉽게.

+1

Whoa, overkill :-) –

+0

@KerrekSB : 다양한 매개 변수를 사용하여 객체의 배열을 구성하는 또 다른 방법이 있습니까? 나는 하나를 생각할 수 없다. (그게 아니라고, 나는 단지 그것을 생각할 수 없다) –

+0

글쎄, OP의 코드는 실제로 정확하고 기본적으로 그렇게하므로 문제가 지금 어디인지는 확실하지 않다. –

관련 문제