класс не имеет элемента данных, но имеет некоторый метод. в этом случае размер объекта класса равен 1 байту. Этот указатель, который передается с объектом при вызове функции-члена. как это возможно, объект 1 байта имеет этот указатель. Этот указатель обычно имеет размер void * и предполагает, что он равен 4 байтам., где этот указатель хранится в объекте пустого класса
ответ
Размер указателя в C/C++ всегда равен размеру длины адреса памяти. (4 байта)
Размер класса пустых полей используется по отдельному адресу. (1 байт)
, если у нас есть экземпляр класса этого типа, когда вы считаете, что это размер по
SizeOf (например) == 1
но
SizeOf (& экземпляр) = = 4 (на системные 32 бит)
так что вы можете поместить адрес экземпляра в указатель типа:
пустоты * р = & экземпляра;
здесь sizeof (p) == 4;
Для этого необходимо указать 4 байта для указания адреса/указателя на экземпляр.
Указатель 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
.
этот не относится к объекту Class. это ведет себя в основном как аргумент функции. В вашем вопросе «этот указатель, который передается с объектом при вызове функции-члена», я хотел бы указать, что это не передается с объектом, адрес объекта передается в этот указатель.
Дополнительную информацию можно получить на странице Where is the 'this' pointer stored in computer memory?. .
- 1. Где хранится указатель функции?
- 2. Где хранится этот файл?
- 3. Где хранится этот управляемый объект?
- 4. Где локальный указатель хранится в памяти?
- 5. «этот» указатель внутри класса
- 6. Где хранится список Python?
- 7. Где хранится метод класса и класса?
- 8. Где этот указатель фактически указывает?
- 9. Дополнительная информация хранится в объекте
- 10. Где хранится этот файл Rails? db/development.sqlite3
- 11. Где именно хранится этот объект? (Swift)
- 12. Где хранится task_struct?
- 13. Как назначить адрес указателю, где адрес хранится в объекте CString?
- 14. Где хранится переменная?
- 15. Где хранится экземпляр объекта WCF?
- 16. где разместить переменную класса в объекте c
- 17. Где хранится экземпляр объекта?
- 18. Где хранится Time.advance?
- 19. Как хранится указатель в памяти?
- 20. Этот указатель в наследовании
- 21. этот указатель статического объекта
- 22. Где находится этот указатель вне пределов досягаемости?
- 23. Где хранится PFFile?
- 24. Где хранится JSESSIONID? (JavaEE)
- 25. Где хранится эталонная переменная java?
- 26. Где хранится таблица виртуальных методов в C++?
- 27. Где конечный параметр хранится в экземпляре анонимного класса?
- 28. где rvalue хранится в c?
- 29. Где хранится его кеш?
- 30. Где хранится BaseX Db?
'char' также 1 байт и может иметь указатель на него (' char * '). – MikeCAT
Указатель 'this' не передается с объектом, как вы говорите. –
Этот указатель не относится к объекту Class. Для получения дополнительной информации см. Http://stackoverflow.com/questions/16585562/where-is-the-this-pointer-stored-in-computer-memory. – neo