Правит ли «отдельные адреса»? применить к объектам, созданным новым?

В проекте стандарта C ++ 11 говорится

Если объект не является битовым полем или подобъектом базового класса нулевого размера, адрес этого объекта является адресом первого байта, который он занимает. Два объекта, которые не являются битовыми полями, могут иметь один и тот же адрес, если один является подобъектом
другого, или если по крайней мере один является подобъектом базового класса нулевого размера, и они имеют разные типы; иначе,
они должны иметь разные адреса. (1.8 (6))

Тем не менее, ранее он говорит, что объект может быть создан new выражение, и это возможно, что new выражение может вызвать пользовательский operator new() быть вызванным, который мог бы вернуть адрес некоторых char[] блок, он зарезервирован для этой цели (первое выделение может вернуть первый адрес блока), что означает, что есть два объекта, которые не имеют разных адресов (тот, который создан new и char[] блок). Означает ли 1.8 (6), что это запрещено для пользователя? new работать таким образом? Или это просто дыра в определении языка?

3

Решение

Понятно, что если вы используете char[] выдавать адреса как ваш «обычай» operator newтогда char[] Объект будет перекрывать объект, который вы создали.

Пока вы не используете char[] Объект для чего-то другого в то же время, это не проблема, и это не то, о чем говорится в этом разделе.

Это не совсем то, о чем идет речь. Если вы создаете свой собственный operator newВы не должны позволять ему возвращать тот же адрес (или перекрывающийся адрес) для объектов, для которых он создает пространство. Это нарушит вышеприведенное правило.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]