对象的大小不同于没有指针的类的大小
size of object is different than size of class having no pointer
任何人都可以让我知道一种对象大小与类大小不同的情况。
假设我有一个
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[]
涉及,并且可能存在差异。
相关文章:
- 在C++中,我如何接受不同于同一行的用户输入
- 为什么指针不写入类的地址?
- int lastIndex[NO_OF_CHARS]={-1} 如何;不同于 vector<int> lastIndex(NO_OF_CHARS, -1);?
- 不同于按值传递和常量引用传递的程序集
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 比较两个 constexpr 指针不是 constexpr?
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 为什么智能指针不能用通常的指针方式声明
- sizeof(enum) 可以不同于 sizeof(std::underlying_type<Enum>::
- 字符指针不递增?
- C++为什么原始指针不会增加shared_ptr的引用计数?
- 为什么在C++中使用delete后指针不为NULL
- 堆指针不会被分配给数组有什么原因吗
- 指向类中函数方法的指针不起作用
- 在 c++ 中返回矢量的指针不起作用
- 仅当指针不是 nullptr 时才调用方法
- c++:指针值不同于指向变量的地址
- 对象的大小不同于没有指针的类的大小
- 为什么成员函数指针不同于C++中的普通函数指针