其中this指针存储在空类的对象中

时间:2015-09-22 05:43:04

标签: c++

类没有任何数据成员,但它有一些方法。在这种情况下,类的对象的大小是1个字节。这个指针在调用成员函数时与对象一起传递。怎么可能有1个字节的对象有这个指针 - 这个指针的大小通常是void *并假设它是4个字节

2 个答案:

答案 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