对象的大小不同于没有指针的类的大小

size of object is different than size of class having no pointer

本文关键字:指针 不同于 对象      更新时间:2023-10-16

任何人都可以让我知道一种对象大小与类大小不同的情况。

假设我有一个

class A {
// I don't know what content can cause this.
};
sizeof(A)!=sizeof(*(new A()))

注意:类不应包含任何指针。

这两个大小不同。 我没有试图"解释"你关于对象和类大小的问题,我只是试图设计一个sizeof(A)!=sizeof(*(new A()))的情况。

(另外,这个问题显然确实说了class A {...};. 在这种情况下,大小是相同的。 但我允许自己以不同的方式定义A,以便得出答案。 所以,我想我没有按照要求回答问题,我回答了我想听的问题!

#include<iostream>
using namespace std;

typedef int A[10];
int main() {
        cout << sizeof(A) << endl;          // 40 (on 32-bit machines)
        cout << sizeof(*(new A())) << endl; // 4 (on 32-bit machines)
}

更新,我想我可以解释一下。 当T是数组类型T = X[n]时,指针衰减开始,new T变得new (X*)。 这可以解释我得到的数字。 有人得到相关的标准报价吗?

因此sizeof(A)10*sizeof(int),但sizeof(*(new A()))变得sizeof(int*)

没有。 sizeof是一个常量表达式:sizeof类型给出类型的大小,sizeof表达式给出该表达式的静态类型的大小。 有没有例外;这就是运算符的定义。

编辑:

接下来,考虑到亚伦·麦克戴德的回答:这仅适用于非阵列new。 没有你可以放入一个会使它无效的类,但如果"类型"由 typedef 定义,为 C 样式数组,new[]涉及,并且可能存在差异。