类没有任何数据成员,但它有一些方法。在这种情况下,类的对象的大小是1个字节。这个指针在调用成员函数时与对象一起传递。怎么可能有1个字节的对象有这个指针 - 这个指针的大小通常是void *并假设它是4个字节
答案 0 :(得分:0)
C / C ++中指针的大小始终等于内存地址长度的大小。 (4个字节)
一类空字段的大小使用单独的地址。 (1个字节)
如果我们有这种类型的类实例,那么按照
计算它的大小sizeof(instance)== 1
但
sizeof(& instance)== 4(在32位系统上)
因此您可以将实例的地址放在指针中:
void * p =& instance;
这里sizeof(p)== 4;
这需要4个字节来保存地址/指针到实例。
答案 1 :(得分:0)
this
指针不是类成员,编译器将其作为隐藏参数添加到幕后方法调用中。
考虑:
struct Object
{
void method(int i);
};
编译器将其转换为:
void Object::method(Object* this, int i); // note the extra first parameter
当你这样做时:
Object object;
object->method(5);
编译器执行类似的操作:
Object object;
Object::method(&object, 5);
隐藏第一个参数称为this
。