c++ - 在堆栈上创建对象

标签 c++

我有一个包含大 vector 的类

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

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

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

谁能给我解释一下到底什么在栈上,什么在堆上?

最佳答案

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

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

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

所以只是在堆栈上创建了这个 vector 容器,其中保存数据的数组是从堆中提取的。

--- 编辑---

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

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

关于c++ - 在堆栈上创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833678/

相关文章:

c++ - LocalAlloc 和 LocalRealoc 用法

c++ - 为什么 QHeaderView::section:checked 和 :selected 样式表不起作用?

c++ - 通过枚举值构造initializer_list包含随机值

c++ - 尝试动态增加数组大小

c++ - 每个的附加条件

c++ - 查找 vector<string> 中的所有元素是否都在字符串中

c++ - 使用 Visual Studio 构建时缺少 log4cplus ad.lib

c++ - 谢尔宾斯基垫片

C++倒计时脚本

c++ - 二维可见性/光线 - 高效的多边形射线相交