[英]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 :: vector。
std::vector<Foo> foos(count);
但是,這樣做不會嚴格將數據放入堆棧,是否有任何原因使使用堆棧對您很重要?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.