指针数组

aki*_*kif 3 c++ arrays pointers

如何获取指向对象(类)的指针数组?

我需要为它们动态分配空间,并且直到运行时才确定数组的长度.任何人都可以解释并告诉我如何定义它吗?并可能解释它们是如何工作的,会非常好:)

Meh*_*ari 15

std::vector改用.它旨在根据需要动态调整集合大小.

#include <vector>
// ...
std::vector<Class*> vec;
vec.push_back(my_class_ptr);
Class* ptr = vec[0];
Run Code Online (Sandbox Code Playgroud)

  • 如果在向量上使用STL算法,指针向量仍有很多泄漏的机会.尽可能使用对象向量而不是指针. (2认同)
  • 他说泄漏的机会,而不是算法本身本身泄漏.例如,`std :: set_difference`为向量中的某些(但不是全部)指针创建别名.这为程序员错误管理资源提供了极好的机会,从而造成泄漏.进入智能指针,左侧舞台. (2认同)

Ree*_*sey 10

您可以使用指向类的指针来执行此操作.

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
Run Code Online (Sandbox Code Playgroud)

基本上,您正在创建一个指向内存中引用数组的指针.第一个new分配这个数组.循环将每个MyClass实例分配到该数组中.

如果您正在使用std :: vector或其他可随意增长的容器,这会变得更加容易,但如果您想自己管理内存,则上述工作正常.

  • Manzoor,当你使用`new`时只使用`delete`.你不会使用`new`来*make*a`vector`,所以不要使用`delete`来销毁它.如果你使用`new`来分配你在'vector`中存储*的东西,那么使用`delete`来销毁它们. (3认同)
  • 您需要一个指向对象的指针数组.这需要一个指向指针的指针 - 指向数组的第一个指针(在内存中),其中数组的每个元素都指向您的类. (2认同)