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

时间:2013-11-13 17:39:44

标签: c++ class

任何人都可以告诉我一个对象大小与班级大小不同的情况。

假设我有一个

class A {

// I don't know what content can cause this.

};

sizeof(A)!=sizeof(*(new A()))

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

2 个答案:

答案 0 :(得分:2)

这两个是不同的大小。我没有试图“解释”你关于对象和类的大小的问题,我只是试图设想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*)

答案 1 :(得分:0)

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

编辑:

跟进,考虑到Aaron McDaid的答案: 这仅适用于非数组new。你什么都没有 可以放入一个会使它无效的类,但如果是“类型” 由typedef定义,是一个C样式数组,new[]是 参与,可能存在差异。