0

谁能告诉我一种情况,其中对象的大小与班级的大小不同。

假设我有一个

class A {

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

};

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

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

4

2 回答 2

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*)

于 2013-11-13T17:55:04.420 回答
0

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

编辑:

跟进,考虑到 Aaron McDaid 的回答:这仅适用于 non-array new。没有任何东西可以放入一个会使它无效的类,但是如果“类型”是由 typedef 定义的,作为 C 样式数组,new[]则涉及到,并且可能存在差异。

于 2013-11-13T17:54:40.777 回答