두 int
를 허용하는 생성자가있는 간단한 클래스 MyClass
이 주어지면 어떻게 힙에서 MyClass
배열을 초기화 할 수 있습니까?힙에있는 객체의 배열을 초기화하는 법
MyClass *classes[2] = { new MyClass(1, 2),
new MyClass(1, 2) };
시도한이 작동하지 않는 것 같습니다. 고맙습니다
두 int
를 허용하는 생성자가있는 간단한 클래스 MyClass
이 주어지면 어떻게 힙에서 MyClass
배열을 초기화 할 수 있습니까?힙에있는 객체의 배열을 초기화하는 법
MyClass *classes[2] = { new MyClass(1, 2),
new MyClass(1, 2) };
시도한이 작동하지 않는 것 같습니다. 고맙습니다
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;
그것은 약간 느린 액세스,하지만 훨씬 사용하기 쉽게.
Whoa, overkill :-) –
@KerrekSB : 다양한 매개 변수를 사용하여 객체의 배열을 구성하는 또 다른 방법이 있습니까? 나는 하나를 생각할 수 없다. (그게 아니라고, 나는 단지 그것을 생각할 수 없다) –
글쎄, OP의 코드는 실제로 정확하고 기본적으로 그렇게하므로 문제가 지금 어디인지는 확실하지 않다. –
게시 한 코드가 컴파일됩니다. – Pubby
배열이 스택에 있습니다. 힙에 포인터가 있습니다. –
@MooingDuck : No : * 포인터 *가 스택에 있고 개체가 힙에 있습니다. –