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,但它显然不是。很抱歉