Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在堆栈中而不是在堆中分配类_C++ - Fatal编程技术网

C++ C++;在堆栈中而不是在堆中分配类

C++ C++;在堆栈中而不是在堆中分配类,c++,C++,我的问题是,下面的声明是在堆栈上分配还是在堆上分配 List * aList = new List(); 目标是有一个指向堆栈中对象的指针。它从堆中分配。 要获取指向堆栈内存的指针,请执行以下操作 { List aList; List* pointer = &aList; // use aList or pointer here pointer->push(foo); } // aList is destroyed here 警告,不要保存指针以备将来使用,因为

我的问题是,下面的声明是在堆栈上分配还是在堆上分配

List * aList = new List();

目标是有一个指向堆栈中对象的指针。

它从堆中分配。 要获取指向堆栈内存的指针,请执行以下操作

{
  List aList;
  List* pointer = &aList;
  // use aList or pointer here
  pointer->push(foo);
} // aList is destroyed here
警告,不要保存指针以备将来使用,因为当大括号结束当前块时,列表将被销毁

例如,不要这样做


它从堆中分配。 要获取指向堆栈内存的指针,请执行以下操作

{
  List aList;
  List* pointer = &aList;
  // use aList or pointer here
  pointer->push(foo);
} // aList is destroyed here
警告,不要保存指针以备将来使用,因为当大括号结束当前块时,列表将被销毁

例如,不要这样做


“目标是在堆栈中有一个指针。”–我不明白这意味着什么。指针很可能在堆栈上,但没有足够的上下文来确定。指针在堆栈上,它指向的内存不是……我澄清了你的问题。“目标是在堆栈中有一个指针。”–我不明白这意味着什么。指针很可能在堆栈上,但没有足够的上下文来确定。指针在堆栈上,它指向的内存不是…我澄清了你的问题。说
List在堆栈上创建列表,但添加节点时仍然从堆中动态分配,不是吗?您需要为它提供一个使用堆栈内存池的分配器,不是吗?像列表 >不是标准C++类,所以我假设它是等价于<代码> Foo。如果OP的意思类似于
std::list
,那么当然,容器中的实际元素仍然在堆中。如果OP想要堆上的一维容器,唯一的方法就是使用
std::array
(或者一个普通的
c
数组),它的元素和容器在同一个存储器中。我错了!我读了这个列表,想到了std::List,但它显然不是。对不起,说
列表列表列表在堆栈上创建列表,但添加节点时仍然从堆中动态分配,不是吗?您需要为它提供一个使用堆栈内存池的分配器,不是吗?像列表 >不是标准C++类,所以我假设它是等价于<代码> Foo。如果OP的意思类似于
std::list
,那么当然,容器中的实际元素仍然在堆中。如果OP想要堆上的一维容器,唯一的方法就是使用
std::array
(或者一个普通的
c
数组),它的元素和容器在同一个存储器中。我错了!我读了这个列表,想到了std::List,但它显然不是。很抱歉