Первое, что следует учитывать при предлагаемом курсе, это то, что вы сообщаете другим, которым, возможно, придется поддерживать код, который вы пишете. Помимо всего прочего, непрозрачные объекты - это способ C указать пользователю библиотеки, что сопровождающий библиотеки не дает абсолютно никаких гарантий относительно реализации объекта, за исключением того, что объект может использоваться с документированными функциями. Удаляя пустоту *, вы в основном объявляете миру: «Я объявляю эту реализацию, которая когда-то была непрозрачной, стабильной». Это может быть не то, что вы хотите.
Во-вторых, ИМХО, которое вы предлагаете, является своего рода половинным решением, которое никого не радует, лучший подход - разработать класс-оболочку. Это дает дополнительное преимущество, позволяя вам оборачивать функции init и destroy, которые неизбежно сопровождают непрозрачные объекты в стиле C, в конструкторах и деструкторах вашего класса. Это позволит вам обеспечить управление ресурсами, а также безопасность типов для ваших клиентов, не занимая при этом гораздо больше работы.