Комментарии 1
Прочитал статью, но не обнаружил обещанного интересного исследования. Материал на уровне учебника по C++, но не более.
По содержательной части:
Предлагаемый автором подход не решает вышеозначенные проблемы: в «чужую» память можно влезть так же просто и непринуждённо, как и в случае «простого API». Компилятор не будет ругаться, если вы запишете в неподходящее место значение неподходящего типа.
А поскольку ранг и смещение имеют одинаковый тип и завёрнуты в структуру с public-доступом к ним, то и вполне можно по ошибке переставить местами два или более параметров.
То есть, предлагается некий синтаксический сахар, приятный в использовании и дающий иллюзию защищённости, но в реальности только маскирующий возможные проблемы.
По-хорошему, как вариант, надо писать некий менеджер совместно используемой памяти, который бы имел карту распределения объектов в этой памяти и предотвращал попытки изменения чужих данных.
PS. И да, «умные указатели» — это всё-таки немного другое.
По содержательной части:
Однако, такие API не столь хороши с точки зрения программирования приложений. Даже в случае с такими простыми API, как описанный выше, ничего не стоит нечаянно затереть данные, поскольку не предусмотрено отдельное имя для каждого конкретного объекта, хранимого в памяти, только один большой непрерывный буфер. Кроме того, интерфейс нетипизированный, то есть, вы лишены и еще одного ощутимого подспорья: когда компилятор ругается, если вы запишете в неподходящее место значение неподходящего типа. Ваш код просто получится неправильным, и ошибки будут иметь самый таинственный и катастрофический характер. Ситуация тем более осложняется потому, что в реальности эти API еще немного сложнее, и при работе с ними вполне можно по ошибке переставить местами два или более параметров.
Предлагаемый автором подход не решает вышеозначенные проблемы: в «чужую» память можно влезть так же просто и непринуждённо, как и в случае «простого API». Компилятор не будет ругаться, если вы запишете в неподходящее место значение неподходящего типа.
А поскольку ранг и смещение имеют одинаковый тип и завёрнуты в структуру с public-доступом к ним, то и вполне можно по ошибке переставить местами два или более параметров.
То есть, предлагается некий синтаксический сахар, приятный в использовании и дающий иллюзию защищённости, но в реальности только маскирующий возможные проблемы.
По-хорошему, как вариант, надо писать некий менеджер совместно используемой памяти, который бы имел карту распределения объектов в этой памяти и предотвращал попытки изменения чужих данных.
PS. И да, «умные указатели» — это всё-таки немного другое.
+5
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Создаем на C++ выразительные умные указатели для удаленной памяти