在C++中在堆栈上分配可变数量的对象
Allocating a variable number of objects on the stack in C++
我想知道是否有一种标准的方法可以在堆栈上分配可变数量的对象,而现在所有的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
,但我不知道该如何处理需要初始化的对象。
关于:
std::vector<MyObject> myObjects;
int runtimeCalculatedSize = sophisticatedRuntimeSizeCalculationMethod();
myObjects.resize(runtimeCalculatedSize,MyObject());
好吧,如果懒惰,并且不担心可移植性,我使用:Foo-array[n];这是标准的C代码,但已从C++标准中删除。但是,由于大多数编译器同时具有这两种功能,因此大多数编译器都具有这一功能。规范的方法是声明所需长度的类型的std::向量。
std::vector<Foo> foos(count);
但是,这样做不会严格地将数据放在堆栈上,使用堆栈对您来说很重要有什么原因吗?
相关文章:
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 为对象分配整数.输出将是什么?
- C++ 使用枚举类对象分配 std::map 值
- 如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 是否可以使用 malloc 为类对象分配内存?
- 将对象分配给数组C++
- 我们可以在cpp中为对象分配函数吗
- 为模板参数类型中的新对象分配内存
- 我无法将对象分配给对象数组
- 对象分配-成员函数的使用无效错误
- 将派生对象分配给函数内的基类指针
- Arduino ESP32如何将BLEUUID对象分配到字符串中
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象
- 奇怪的对象分配行为C