C++,没有<vector>的对象数组

osg*_*sgx 31 c++ arrays

我想在C++中创建一个不使用STL的对象数组.

我怎样才能做到这一点?

我怎么能创建Object2数组,它没有无参数构造函数(默认构造函数)?

sha*_*oth 34

如果有问题的类型没有参数构造函数,请使用new[]:

Object2* newArray = new Object2[numberOfObjects];
Run Code Online (Sandbox Code Playgroud)

不要忘记在delete[]不再需要数组时调用:

delete[] newArray;
Run Code Online (Sandbox Code Playgroud)

如果它没有这样的构造函数用于operator new分配内存,那么就地调用构造函数:

//do for each object
::new( addressOfObject ) Object2( parameters );
Run Code Online (Sandbox Code Playgroud)

同样,不要忘记在不再需要时释放数组.

  • @Andrey:这是一个简单的旧位置. (7认同)
  • Object2没有默认的c'tor. (3认同)
  • @osgx:void*buffer = :: operator new [](numberOfObjects*sizeof(Object2)); 这不是一个对象数组,而是一块内存. (3认同)
  • Placement new绝对是正确的答案.@sharptooth:它从一块原始内存开始,在调用构造函数时它变成一个对象数组.但是一定要正确处理异常并手动调用析构函数,并且只对那些完成构造的对象调用.这不是微不足道的. (3认同)

Kir*_*sky 13

// allocate memory
Object2* objArray = static_cast<Object2*>( ::operator new ( sizeof Object2 * NUM_OF_OBJS ) );
// invoke constuctors
for ( size_t i = 0; i < NUM_OF_OBJS; i++ )
  new (&objArray[i]) Object2( /* initializers */ );

// ... do some work

// invoke destructors
for ( size_t i = 0; i < NUM_OF_OBJS; i++ )
  objArray[i].~Object2();

// deallocate memory
::operator delete ( objArray );
Run Code Online (Sandbox Code Playgroud)


muk*_*mar 12

假设您的类是Base,并且您有一个参数构造函数

Base arr[3] = {Base(0), Base(1), Base(2)} ;
Run Code Online (Sandbox Code Playgroud)


Rau*_*ait 5

Object2 *myArray[42];
for (int i = 0; i < 42; i++)
{
  myArray[i] = new Object2(param1, param2, ...);
}
Run Code Online (Sandbox Code Playgroud)

稍后您将需要遍历数组并单独释放每个成员:

for (int j = 0; j < 42; j++)
{
  delete myArray[j];
}
Run Code Online (Sandbox Code Playgroud)