C не является C ++, но у обоих одинаковые проблемы со слабой типизацией.Тем не менее, причиной являются не неявные типы типов, но тенденция к «наказанию» (подрыву системы типов), особенно в библиотеках структур данных.
Там есть сборщики мусора.для C и / или C ++.Консервативный коллекционер Бема, наверное, самый известный.Он консервативен в том, что, если он видит битовую комбинацию, похожую на указатель на какой-либо объект, он не собирает этот объект.Это значение может быть полностью другим типом значения, поэтому объект можно собирать, но «консервативный» означает безопасную игру.
Однако даже консервативный сборщик может быть обманут, если вы используете вычисляемые указатели.Например, существует структура данных, в которой каждый узел списка имеет поле, определяющее разницу между адресами следующего и предыдущего узлов.Идея состоит в том, чтобы задать поведение двойного связанного списка с одной ссылкой на узел за счет более сложных итераторов.Так как нигде нет явного указателя на большинство узлов, они могут быть неправильно собраны.
Конечно, это очень исключительный особый случай.
Более важно - у вас могут быть либо надежные деструкторы, либосборка мусора, а не оба.Когда происходит сборка мусора, сборщик не может решить, какой деструктор вызвать первым.
Поскольку шаблон RAII широко распространен в C ++, и в нем используются деструкторы, возникает конфликт IMO.Могут быть допустимые исключения, но я считаю, что если вы хотите сборку мусора, вы должны использовать язык, который был разработан с нуля для сборки мусора (Java, C #, ...).