【问题标题】:where are the common member variables stored when defining a class?定义类时公共成员变量存储在哪里?
【发布时间】:2017-11-24 08:48:22
【问题描述】:

我定义了一个简单的类:

class A
{
public:
    int a;
};

sizeof(A) 是 4,所以我很困惑,当我刚刚定义这样一个类时,公共成员变量 a 存储在哪里?堆栈还是堆?

【问题讨论】:

  • class 是一个“蓝图”——您需要一个实例来了解数据的存储位置。此外,这实际上更多的是关于存储持续时间,因为 C++ 标准没有定义“堆栈”和“堆”要求
  • 除了 c++ 标准中没有堆栈或堆分配等概念之外,这将取决于该类的实例化方式以及它的内存分配位置。
  • @UnholySheep 那么为什么这个类会占用 4 种类型呢?
  • 类型是什么意思? 4 是常规整数的大小。
  • 如果 sizeof int 是 4,那么它就是 4,它不会神奇地改变,记住 sizeof 在编译时执行它的操作。

标签: c++ class c++11


【解决方案1】:

它没有存储在任何地方。只有当您实际创建 A 类型的对象时,它才会在内存中获得一个位置。

int main()
{
   A obj1; // obj1.a will be on the "stack"
   A* pObj2 = new A; // pObj2->a will be on the "heap"
}

【讨论】:

  • 我不是指创建对象的方法。如果变量a没有存储在任何地方,为什么A类会占用4种类型?
  • @AndrewGong A 类没有。它的大小是 4 - 但它会告诉您创建对象时的大小。
  • 对不起,如果A类没有你说的4个类型,为什么sizeof(A)是4。 ~~
  • @AndrewGong 将sizeof(A) 视为A 类型的对象将占用的存储量,无论它驻留在哪种内存中。
  • @AndrewGong 如果我画一个房子的建筑草图,我可以说它的大小是 5 米,但是在我建造之前没有任何实际的房子大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2013-06-26
相关资源
最近更新 更多