我在堆上分配一个类对象,所以所有的数据成员都在堆上。但是,如果我的类包含一些数据结构(例如std::vector
)作为成员,那该怎么办:
#include <vector>
class Temp
{
public:
std::vector<double> m_dPtList;
};
int main()
{
Temp* pTemp = new Temp;
pTemp->m_dPtList.Add(10.0);
pTemp->m_dPtList.Add(20.0);
pTemp->m_dPtList.Add(30.0);
return 0;
}
值10.0
,20.0
和30.0
是否会存储在堆上或堆栈上?
答案 0 :(得分:2)
pTemp在堆上。 你通过值添加到vector中,所以value被添加到vector中,vector自己在堆上分配存储。 内容将在堆栈上的情况是:
Class Temp
{
std::vector<double *> m_dPtList;
}
double temp = 10.0;
Temp* pTemp = new Temp();
pTemp->m_dPtList.Add (&temp);
答案 1 :(得分:1)
vector
的缓冲区总是在堆上分配,但一般情况下,对象的设计是 - 直接成员将被分配到同一个地方,但是上帝知道嵌入式指针会在哪里指向。
答案 2 :(得分:0)
在您的代码中,Temp
只是包裹std::vector
。您使用new
来创建Temp对象,因此它会在堆上运行。该对象本身可以包含一个指向内存的指针,其中向量将存储添加到其中的数据...也将在堆上。总而言之,只有pTemp
指针本身就在你的堆栈上。