Как стать автором
Обновить

Комментарии 1

Прочитал статью, но не обнаружил обещанного интересного исследования. Материал на уровне учебника по C++, но не более.

По содержательной части:

Однако, такие API не столь хороши с точки зрения программирования приложений. Даже в случае с такими простыми API, как описанный выше, ничего не стоит нечаянно затереть данные, поскольку не предусмотрено отдельное имя для каждого конкретного объекта, хранимого в памяти, только один большой непрерывный буфер. Кроме того, интерфейс нетипизированный, то есть, вы лишены и еще одного ощутимого подспорья: когда компилятор ругается, если вы запишете в неподходящее место значение неподходящего типа. Ваш код просто получится неправильным, и ошибки будут иметь самый таинственный и катастрофический характер. Ситуация тем более осложняется потому, что в реальности эти API еще немного сложнее, и при работе с ними вполне можно по ошибке переставить местами два или более параметров.


Предлагаемый автором подход не решает вышеозначенные проблемы: в «чужую» память можно влезть так же просто и непринуждённо, как и в случае «простого API». Компилятор не будет ругаться, если вы запишете в неподходящее место значение неподходящего типа.

А поскольку ранг и смещение имеют одинаковый тип и завёрнуты в структуру с public-доступом к ним, то и вполне можно по ошибке переставить местами два или более параметров.

То есть, предлагается некий синтаксический сахар, приятный в использовании и дающий иллюзию защищённости, но в реальности только маскирующий возможные проблемы.

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

PS. И да, «умные указатели» — это всё-таки немного другое.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий