在堆栈上创建对象

Creating objects on the stack

本文关键字:创建对象 堆栈      更新时间:2023-10-16

我有一个包含大向量的类

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

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

有人可以向我解释堆栈上到底是什么以及堆上有什么吗?

本质上,您可以将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";