size的行为,将类放入内存空间中?[复制]

sizeof behavior, fit a class within a memory space? [duplicate]

提问人:Mike 提问时间:10/19/2022 最后编辑:Vlad from MoscowMike 更新时间:10/19/2022 访问量:70

问:

我正在尝试验证类的实例是否适合队列(由 C 库定义),并注意到 sizeof() 没有按照我的想法执行。

#include <iostream>
using namespace std;

class A {
    int x, y, z;
public:
    A() {}
    void PrintSize() { cout << sizeof(this) << endl; }
};

class B : public A {
    int a, b, c;
public:
    B() {}

    void PrintSize() { cout << sizeof(this) << endl; }
};

int main() {
    A a;
    B b;
    a.PrintSize(); // is 8
    b.PrintSize(); // is 8

    cout << sizeof(a) << endl;
    cout << sizeof(b) << endl;
}

返回:

8
8
12
24

我没想到“8”值——为什么在课堂上取值会有所不同?如何验证我定义的类是否适合内存空间,尤其是在编译时?

C++ C++14 这个 大小

评论

4赞 Yksisarvinen 10/19/2022
this是一个指针,它将始终具有指针大小。尝试或/。sizeof(*this)sizeof(A)sizeof(B)
1赞 Yksisarvinen 10/19/2022
可能的重复项:“this”指针的类型所有指针在 C++ 中的大小是否相同?
1赞 Ted Lyngmo 10/19/2022
@Mike 不,这是因为你采用指针的大小,就像 Yksisarvinen 提到的那样,Vlad 在下面回答了。只要做(不需要括号),你就会得到对象所指向的大小。sizeof *thissizeof expressionthis
1赞 Ted Lyngmo 10/19/2022
@Mike 你的问题就是关于这个的。“我没想到'8'值——为什么在班级里学习时会有所不同?”- 在课堂上学习时没有什么不同。这是因为你在班级里拿错了东西的大小——这就是答案。
1赞 Yksisarvinen 10/19/2022
this是一个指针。in 的类型是 ,与 in - 相同。你的问题与指针有关。thisA::PrintSize()A*thisB::PrintSize()B*

答:

4赞 Vlad from Moscow 10/19/2022 #1

此表达式

sizeof(this)

给出指针的大小。看来你的意思是相应类的大小this

sizeof( *this )

评论

0赞 Mike 10/19/2022
感谢您的回答,这是一个非常有帮助的回复。
0赞 user4581301 10/19/2022
@Mike 一些额外的文档。大多数情况下,这是你不需要知道的东西,直到它突然变得重要,但如果你在它变得重要之前知道它,你可以为自己节省大量时间。