개체 (클래스)를 가리키는 포인터 배열을 얻으려면 어떻게해야합니까?포인터 배열
동적으로 공간을 할당해야하며 배열 길이는 런타임까지 결정되지 않습니다. 아무도 그것을 설명하는 법을 설명하고 말해 줄 수 있습니까? 아마도 그것이 어떻게 작동하는지 설명해 줄 수 있습니다.
개체 (클래스)를 가리키는 포인터 배열을 얻으려면 어떻게해야합니까?포인터 배열
동적으로 공간을 할당해야하며 배열 길이는 런타임까지 결정되지 않습니다. 아무도 그것을 설명하는 법을 설명하고 말해 줄 수 있습니까? 아마도 그것이 어떻게 작동하는지 설명해 줄 수 있습니다.
클래스 포인터를 가리키는 포인터로이 작업을 수행 할 수 있습니다.
MyClass ** arrayOfMyClass = new MyClass*[arrayLengthAtRuntime];
for (int i=0;i<arrayLengthAtRuntime;++i)
arrayOfMyClass[i] = new MyClass(); // Create the MyClass here.
// ...
arrayOfMyClass[5]->DoSomething(); // Call a method on your 6th element
기본적으로 메모리에있는 참조 배열에 대한 포인터를 만듭니다. 최초의 새로운 배열이이 배열을 할당합니다. 루프는 각 MyClass 인스턴스를 해당 배열에 할당합니다.
std :: vector 또는 다른 컨테이너를 사용하면 훨씬 쉽게 될 수 있지만, 위와 같은 경우에는 메모리를 직접 관리해야합니다.
대신 std::vector
을 사용하십시오. 필요에 따라 컬렉션의 크기를 동적으로 조정하도록 설계되었습니다.
#include <vector>
// ...
std::vector<Class*> vec;
vec.push_back(my_class_ptr);
Class* ptr = vec[0];
편집하거나 댓글을 달 수 없으므로 답변에 게시해야합니다. Reed Copsey가 말했지만 수정본이 하나 있습니다. 당신은 포인터의 배열의 요소에 액세스 할 때이 같은 멤버에 액세스해야합니다
MyClass ** arrayOfMyClass = new MyClass*[arrayLengthAtRuntime];
for (int i=0;i<arrayLengthAtRuntime;++i)
arrayOfMyClass[i] = new MyClass(); // Create the MyClass here.
// ...
arrayOfMyClass[5]->DoSomething(); // Call a method on your 6th element
내가 (: 벡터가 무엇인지 표준) 내 자신의 동적 크기 배열을 구현하기 위해이 방법을 많이 사용, 주로 I 때문에 나는이 증후군을 발명하지 않았지만, 내가 그들을 나의 특별한 용도로 커스터마이즈하기를 좋아하기 때문에.
'std :: vector'에 대한 증후군을 발명하지 않았습니까? : O 그렇다면 실제로 C++ 컴파일러 작성을 고려해야합니다. 아마도 자신의 CPU를 빌드하십시오. –
글쎄, 부분적으로는 std :: vector의 존재에 대해 알기 전에 내 자신의 벡터를 작성하는 법을 배웠기 때문에 부분적으로는 습관 일뿐입니다.) –
사용 boost::ptr_vector 잊지 모두 배열 및 포인터 두통 :
boost::ptr_vector<animal> vec;
vec.push_back(new animal);
vec[0].eat();
동적 요소를 추가 할 수 있으며이를 삭제에 대해 걱정할 필요가 없습니다.
부스트가 옵션이 아니면 (슬프게도, 이것은 어디서나 볼 수 있습니다. 일부 무모한 이유로 C++ 코드에서 작동합니다.)하지만 TR1은 - 예를 들어 당신은 최근 g ++ 버전, 또는 VC++ 2008 SP1을 사용하고 있습니다. 그리고'std :: vector
단일 부모 또는 특정 클래스에서 파생 된 특정 클래스의 포인터? –
아니요 아니요, 모든 클래스 – akif
가변 길이 배열 (VLA)은 비표준 컴파일러 확장입니다. C99 스펙에 추가되었으므로 C++ 스펙에 추가되지 않습니다. intel/gnu/microsoft가 구현 한 컴파일러 확장으로 인해 작동합니다. 벡터 만 사용하면됩니다. –