Я поддерживаю библиотеку, предназначенную для сред с ограниченными ресурсами на микроконтроллерах без ОС: emio. Эта библиотека C++20 использует виртуальное наследование и, следовательно, имеет виртуальные деструкторы.
Пользователь столкнулся с новой проблемой в автономной среде без кучи:
< blockquote>
неопределенная ссылка на `operator delete(void*, unsigned int)' #99
Основная причина проблемы объясняется здесь: Почему для виртуальных деструкторов требуется оператор удаления.
Мой вопрос:
Могу ли я решить проблема пользователя как-то? Может быть, предоставив уничтожающее средство удаления для всех классов? Или пользователю необходимо реализовать свой собственный глобальный метод удаления (например, вызов std::terminate), который завершится с ошибкой, если он случайно использует выражения use new/delete?
Кроме того, почему компоновщик этого не делает? удалить эту функцию, даже если она никогда не вызывается?
Примечание: я не хочу исключать пользователей, которые используют функцию new/delete и работают в неавтономных средах.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-environ