В C++ можно выделить const объект на куче:
const Class* object = new const Class();
const_cast( object )->NonConstMethod(); // UB
так что попытка записи в объект будет UB.
Я не понимаю, чем такой объект будет отличаться от объекта, выделенного из кучи, который не объявлен const
:
const Class* object = new Class();
То есть, когда я выделяю объект на стеке, он переходит в автоматическое хранилище, которое специфично для конкретной реализации, и поэтому могут быть какие-то специфичные для реализации средства, которые позволят выделять const
объекты каким-то особым образом, что даст UB при записи в объект.
Однако всякий раз, когда я использую new
, компилятор обязан выдать вызов функции operator new()
, и эта функция не может делать ничего другого - она просто выделяет память единообразным образом, независимо от того, была ли в моем коде const
.
Чем const
объект, выделенный из кучи, отличается от не const
объекта и как возможно неопределенное поведение, если я попытаюсь его изменить?