在C ++中在堆栈上分配可变数量的对象

时间:2013-11-23 03:59:48

标签: c++ stack allocation dynamic-allocation

我想知道是否有一种标准方法可以在堆栈上分配可变数量的对象,这些都是当今C ++编译器所支持的。假设我有一个类Foo带有一个非平凡的公共构造函数,它接受0个参数,我想在堆上分配10个这个类的实例,那么我可以在C ++中使用运算符new[]

function doSomething() {
    Foo * foos = new Foo[10];
    ...
}

如果在编译时不知道要分配的对象数,我仍然可以以类似的方式使用运算符new[]

function doSomething(size_t count) {
    Foo * foos = new Foo[count];
    ...
}

所以,如果我决定在堆栈而不是堆上分配我的类的10个实例,我会使用常规数组定义:

function doSomething() {
    Foo array[10];
    Foo * foos = array;
    ...
}

或者可能只是Foo foos[10];以防我以后不需要重新分配foos,确定。

现在,如果我想在堆栈上分配的对象数量仅在运行时已知,我会使用......什么?我能想到在堆栈上动态分配连续内存的唯一方法是调用非标准内部函数alloca,但我不知道如何处理需要初始化的对象。

2 个答案:

答案 0 :(得分:0)

怎么样:

std::vector<MyObject> myObjects;

int runtimeCalculatedSize = sophisticatedRuntimeSizeCalculationMethod();

myObjects.resize(runtimeCalculatedSize,MyObject());

答案 1 :(得分:0)

好吧,如果懒惰,而不担心可移植性,我使用:Foo array [n]; 这是标准C代码,但已从C ++标准中删除。但由于大多数编译器都同时执行这两种编译器,因此大多数编 规范的方法是声明一个所需长度类型的std :: vector。

std::vector<Foo> foos(count);

但是,这样做不会严格地将数据放在堆栈上,使用堆栈对你来说很重要吗?