Я бы хотел заменить глобальные operator new()
и operator delete()
(наряду со всеми их вариантами), чтобы сделать некоторые трюки управления памятью. Я хотел бы, чтобы весь код в моем приложении использовал пользовательские операторы (включая код в моих собственных DLL, а также сторонние библиотеки DLL). Я прочитал вещи о том, что компоновщик выберет первое определение, которое он видит при связывании (например, если первая библиотека, содержащая ваш пользовательский operator new()
, будет «бить» ссылку с ЭЛТ). Есть ли способ гарантировать, что это произойдет? Каковы правила для этого, так как это действительно многократно определенный символ (например, void* operator new(size_t size)
имеет два определения в глобальном пространстве имен)?Можно ли повсеместно заменить глобальный «оператор new()»?
О сторонних DLL-экранах, которые могут быть статически связаны с CRT? Даже если они динамически связаны с ЭЛТ, есть ли какой-то способ, я могу связать их с моимoperator new()
?
Это чревато опасностью. Вы действительно хотите это сделать (y/N)? > –
DLL - это двоичные файлы, поэтому они уже скомпилированы и связаны к моменту их получения. – KingRadical
Достаточно честный. Я только спрашиваю, потому что мне будет плохо, если ваш следующий вопрос StackOverflow «как мне восстановить данные на очень важной производственной системе?» ;) –