谁能告诉我一种情况,其中对象的大小与班级的大小不同。
假设我有一个
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
一个表达式给出了该表达式的静态类型的大小。没有例外;这就是运算符的定义。
编辑:
跟进,考虑到 Aaron McDaid 的回答:这仅适用于 non-array new
。没有任何东西可以放入一个会使它无效的类,但是如果“类型”是由 typedef 定义的,作为 C 样式数组,new[]
则涉及到,并且可能存在差异。