Как `operator new` реализуется на уровне компоновщика?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как `operator new` реализуется на уровне компоновщика?

Сообщение Anonymous »

Согласно документации C++, оператор new/etc. функции:

неявно объявлены в каждой единице перевода[, и т]программа неправильно сформирована [...], если предусмотрено более одной замены в программе для любой из заменяемых функций распределения.

То есть, если программист не определяет собственный оператор new, то стандартная библиотека C++ должна И наоборот, если они предоставляют, то стандартная библиотека не должна.
Я это понимаю. поведение, но чего я не понимаю, так это того, как это работает на уровне компоновщика.
Стандартная библиотека C++ компилируется до программы, которая использует его, и именно здесь программист решает, определять ли свой собственный оператор new. Таким образом, стандартная библиотека C++ действительно должна где-то предположительно предоставлять оператор new. Но затем, когда программа пользователя скомпонована со стандартной библиотекой, если они определили свою собственную функцию распределения, тогда это приведет к множественным определениям и противоречит приведенной выше документации (на практике, слава богу, вы получаете ошибку компоновщика о повторяющихся символах).
И наоборот, если стандартная библиотека не определяет оператор new, то, конечно, пользователю придется это сделать, иначе любой его вызов приведет к отсутствию символов (и, следовательно, к ошибке компоновщика в другую сторону).

Подробнее здесь: https://stackoverflow.com/questions/779 ... nker-level
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»