任何人都可以告诉我一个对象大小与班级大小不同的情况。
假设我有一个
class A {
// I don't know what content can cause this.
};
sizeof(A)!=sizeof(*(new A()))
注意:类不应包含任何指针。
答案 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[]
是
参与,可能存在差异。