在堆栈上创建对象

时间:2016-03-06 22:58:33

标签: c++

我有一个包含大矢量的类

class myClass
{
public:
    myClass(int size)
private:
    vector<int> myVector;
}

myClass::myClass(int size)
{
    myvector = vector<int>(size);
}

如果我调用myClass o(100000),则在堆栈上创建对象。但是,堆栈上到底是什么?我从堆栈中分配了多少内存?矢量的内容应该在堆上分配,对吧?

有人可以向我解释堆栈上究竟是什么以及堆上的内容是什么?

1 个答案:

答案 0 :(得分:6)

基本上,您可以将std::vector概括为

template<typename T>
struct vector {
    T* data;
    size_t size;
    size_t capacity;
};

个别实施可能会有所不同,但它们通常看起来像上面那样。

所以它只是在堆栈上创建的这个向量容器,将从堆中提取将保存数据的数组。

---编辑---

对于给定的堆栈变量,您可以使用sizeof运算符来确定它需要多少堆栈空间,例如

myClass o(100000);
std::cout << "o's size is " << sizeof(o) << "\n";