Я поддерживаю плагин (реализованный как dll) для большого приложения с закрытым исходным кодом. Это работает нормально в течение многих лет. Однако с последним обновлением SDK поставщик перегрузил глобальные операторы new и delete. Это доставляет мне массу неприятностей. Что происходит, так это то, что мой плагин выделяет строку. Я передаю эту строку в статически связанную библиотеку, которая изменяет ее (меняет ее длину, тем самым перераспределяя ее). Мое приложение вылетает.
Причина, конечно же, в том, что строка находится в пользовательской куче, выделенной поставщиком. Статически связанная библиотека ничего не знает об этой куче и пытается использовать операторы new/delete по умолчанию для этой памяти. Бум.
Теперь вопрос: как я могу сохранить свой код в чистоте и избежать использования операторов поставщика? Макрос условного препроцессора отсутствует. Я не могу избежать включения оскорбительного заголовка, так как он содержит на 2000 строк больше кода, который мне нужен для плагина. Я не могу передать предоставленный распределитель в другую библиотеку, поскольку он не предоставляет для этого никаких механизмов. Я уже звонил продавцу по этому поводу. Я не знаю, что еще я мог бы попробовать?
Дополнение: после жарких дебатов мне удалось убедить поставщика снова удалить перегрузки из следующей версии SDK. Я решил свою насущную проблему, просто взломав текущий SDK и удалив перегрузки вручную. Спасибо за все предложения в этой теме. Они служили аргументами и дальнейшим «доказательством» того, почему перегрузки изначально были плохой идеей.