LINUX.ORG.RU

Теоретический вопрос по C++


0

0

Задали тут вопрос: может-ли sizeof(имя класса) отличаться от sizeof(экземпляр класса) для одного и того же класса и при условии, что все данные выровнены и класс не пустой?

★★★★

не может. В чем бы был смысл значения sizeof(className) если размер реально выделенных объектов от него мог отличаться?

Вообще, как прикажете выделять память под такой объект? Без подключения libastral.h у нас есть только один ориентир - sizeof(className)?

gods-little-toy ★★★
()

Странный вопрос - один объект может являться экземпляром кучи классов.

> хм интересно а sizeof(xxx) RTTI будет использовать?

Нет.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Странный вопрос - один объект может являться экземпляром кучи классов.

ну может самый толстый можно было выбрать. хотя с множественным наследованием получается сильно запутанно все...

> Нет.

проверил, действительно - нет.

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

В случае грязных хаков с class X { ....... char tail[1]; }; размер _реально_ выделенных объектов может и отличаться. :)

anonymous
()
Ответ на: комментарий от tailgunner

> Странный вопрос - один объект может являться экземпляром кучи классов.

Не может. Класс у объекта всегда один. Вот ссылку или указатель на него можно рассматривать как хочется.

anonymous
()
Ответ на: комментарий от anonymous

>> Странный вопрос - один объект может являться экземпляром кучи классов.

> Не может.

Уже не считается, что экземпляр класса является и экземпляром всех его суперклассов?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Уже не считается, что экземпляр класса является и экземпляром всех его суперклассов?

Нет. Память выделяется под объект вполне определенного класса.

anonymous
()
Ответ на: комментарий от gods-little-toy

> ну может самый толстый можно было выбрать

в стандарте это называется most derived object

dilmah ★★★★★
()

a) Нет, не может б) Предпочтительно использовать sizeof() на инстанс, т.к тип инстанса может поменяться.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>б) Предпочтительно использовать sizeof() на инстанс, т.к тип инстанса может поменяться

Т.е если ты выше по коду сменил тип инстанса, то sizeof() от инстанса при этом не сломается.

Absurd ★★★
()
Ответ на: комментарий от generatorglukoff

>мб проще говорить не инстанс, а переменная? ;)

А если оно const?

Absurd ★★★
()
Ответ на: комментарий от anonymous

>> Уже не считается, что экземпляр класса является и экземпляром всех его суперклассов?

> Нет. Память выделяется под объект вполне определенного класса.

А в огороде растет бузина.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

у объекта есть вполне конкретный статический тип и sizeof определяется в compile time по статическому типу.

Не в compile time определяется только для variable size arrays, но их в С++ все равно нет.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> у объекта есть вполне конкретный статический тип и sizeof определяется в compile time по статическому типу.

Я знаю. Если ОП спрашивал то, о чем я подумал, то как вообще можно задавать такие вопросы? Понятно же, что ответ "нет". Но, может, я неправильно понял вопрос ("классы", "экземпляры" - смоллтоковская какая-то терминология %)).

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.