堆分配对象上的数据成员是在堆还是堆栈上分配?

时间:2011-01-07 09:34:29

标签: c++

我在堆上分配一个类对象,所以所有的数据成员都在堆上。但是,如果我的类包含一些数据结构(例如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.020.030.0是否会存储在堆上或堆栈上?

3 个答案:

答案 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指针本身就在你的堆栈上。