Re[10]: Вызов глобального delete из перегруженного
От: Masterkent  
Дата: 12.08.10 12:39
Оценка:
Кодт:

К>Ещё раз, внимательно.


К>1. Пусть CRT содержит, например, скомпилированные методы специализации basic_string<char> и, соответственно, allocator<char>.

К>2. Пусть эти методы используют buf_ = new char[N]; / delete[] buf_;
К>3. Пусть пользователь переписал ::operator new[] и ::operator delete[]

К>Вопрос: как CRT узнает о том, что эти операторы переписаны, если оно уже скомпилировано и слинковано в crt.dll ?

К>Эрго,
К>- либо оно будет использовать свои, непереписанные, версии этих операторов (нарушаем ODR, э?)

А при чём здесь ODR? ODR применимо только к программе, написанной пользователем, а CRT, являющаяся частью реализации, сюда никаким боком не относится. Если в _пользовательском_ коде будет вызываться неправильный operator new, operator new[] и т.д. (при использовании того же basic_string<char>, например), то нарушение требований стандарта может быть, но лишь по части observable behavior.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.