2015-09-22 3 views
2

класс не имеет элемента данных, но имеет некоторый метод. в этом случае размер объекта класса равен 1 байту. Этот указатель, который передается с объектом при вызове функции-члена. как это возможно, объект 1 байта имеет этот указатель. Этот указатель обычно имеет размер void * и предполагает, что он равен 4 байтам., где этот указатель хранится в объекте пустого класса

+0

'char' также 1 байт и может иметь указатель на него (' char * '). – MikeCAT

+0

Указатель 'this' не передается с объектом, как вы говорите. –

+0

Этот указатель не относится к объекту Class. Для получения дополнительной информации см. Http://stackoverflow.com/questions/16585562/where-is-the-this-pointer-stored-in-computer-memory. – neo

ответ

0

Размер указателя в C/C++ всегда равен размеру длины адреса памяти. (4 байта)

Размер класса пустых полей используется по отдельному адресу. (1 байт)

, если у нас есть экземпляр класса этого типа, когда вы считаете, что это размер по

SizeOf (например) == 1

но

SizeOf (& экземпляр) = = 4 (на системные 32 бит)

так что вы можете поместить адрес экземпляра в указатель типа:

пустоты * р = & экземпляра;

здесь sizeof (p) == 4;

Для этого необходимо указать 4 байта для указания адреса/указателя на экземпляр.

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.

1

этот не относится к объекту Class. это ведет себя в основном как аргумент функции. В вашем вопросе «этот указатель, который передается с объектом при вызове функции-члена», я хотел бы указать, что это не передается с объектом, адрес объекта передается в этот указатель.

Дополнительную информацию можно получить на странице Where is the 'this' pointer stored in computer memory?. .

Смежные вопросы