Когда нужно либу на C++ сделать доступной для нормальных (с человеческим лицом) языков программирования — приходится переходить на extern "C". А значит многих фишек C++ уже не будет.
К примеру, не будет ссылок — а только указатели.
Не будет исключений.
Но то пол беды еще, больше интересует вопрос очистки памяти.
К примеру, некая функция возвращает указатель void*. А внутри там объект класса из C++. Если его получит прога и вызовет calloc.free для этого указателя — вызовется ли деструктор? Нужно ли каждое поле отдельно делать calloc.free ?