Здравствуйте, Анатолий Широков, Вы писали:
АШ>В этой теме многие посоветовали в публичный интерфейс выставить указатель на неполный тип, а в реализации использовать полный. Но даже при сокрытии реального типа от клиента никто не запрещает исследовать память по полученному указателю и ее каким-либо образом модифицировать. В свое время MS, защищая свои структуры WINAPI, озаботилась подобным и перешла на фиктивные HANDLE, являющиеся ничем иным как ключем некой внутренней структуры, по которому реализация получает реально скрытые от глаз клиента данные.
А зачем собственно такой огород городить? Если задаться целью залезть в какую-то внутреннюю структуру, то с помощью дебаггера это всё равно можно сделать. Если не ошибаюсь, то основная идея сокрытия внутренней структуры в том, чтобы иметь возможность менять её не ломая при этом код пользователя. Если пользователь решил, что он хочет головной боли, то пусть играет с внутренними данными напрямую, дуракам закон не писан
С этой точки зрения, указатели на некую структуру, тело которой не определено для пользователя, это более чем достаточно для "инкапсуляции".