«Неправильное применение sizeof к интерфейсу Fraction в нехрупком ABI» в Objective-C - PullRequest
2 голосов
/ 28 августа 2011

Я изучаю «Программирование в Objective-C 2.0» Стивена Кочана.Мы создали объект Fraction с двумя переменными экземпляра int.Позже в книге Кочан использует оператор sizeof для указателя объекта Fraction myFract:

sizeof(*myFract)

Когда я это делаю, я получаю ошибку компиляции:

Неправильное применение sizeof'to interface' Fraction 'в нехрупком ABI

http://clang.llvm.org/compatibility.html#sizeof-interface утверждает, что эта ошибка может возникать для объекта, размер которого может измениться, но экземпляр Fraction содержит только две переменные экземпляра int (плюс «унаследованный член isa», упомянутый в книге).

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Чтобы понять, что сказал Чак, вы должны использовать class_getInstanceSize() во время выполнения, если вам действительно нужно знать размер объекта.

3 голосов
/ 28 августа 2011

Размер объекта все еще может измениться, потому что вы используете современный ABI. В более старых версиях Objective-C объекты были в основном структурами, и это означало, что их можно было изменять по размеру (). Это уже не так, и это никогда не было особенно хорошей идеей. Я не уверен, что Кочан пытался научить этому, но, к вашему сведению, это не обязательно для программирования Objective-C. Вы должны быть в состоянии получить старое поведение, собрав 32-разрядную версию на Mac, но опять же, это не то, что вы захотите делать в реальных программах.

...