« first day (1 day earlier)    last day (15 days later) » 

5:29 AM
@wololo это всё хорошо, но пример там на два пункта выше. Т.е. если бы этот пример был прикреплён к 8-у пункту, тогда вопросов нет. У меня вопрос к размещению этого примера, он там вообще выглядит лишним.
 
 
2 hours later…
7:06 AM
@ixSci Вот да, он там не очень-то вписывается
 
 
2 hours later…
9:10 AM
@Qwertiy, Вроде как нет. Первоначально pb указывает на тот участок в памяти, в котором располагается объект типа D1. Затем внутри mutate мы закончили время жизни D1, и на его месте расположили объект типа D2. Однако, указатель pb не изменился, мы его не трогали, он по прежнему указывает на тот же самый участок памяти.
Однако, того объекта, на который pb указывал первоначально больше нет. Теперь на том месте, на который указывает pb расположен другой объект. Более того, не просто другой объект, а объект другого типа. Что произойдёт, если мы попытаемся обратиться к новому объекту через "старый" указатель pb? Пункт 6.6.6/8 явно запрещает такое обращение.
 
9:28 AM
@wololo но от присваивания в новую переменную указатель ведь не изменится
 
9:39 AM
@Qwertiy, в смысле? от какого присваивания? Вы имеете в виду строку void* q = pb;?
 
@wololo а ели не void, а новый тип?
 
@Qwertiy, присваивать можно, но судя по всем, все указатели, источником которых был pb использовать для чтения/модификации нового объекта нельзя.
 
@wololo так нафига мне тогда там вообще новый объект???
как его использовать, если уж он там создан?
 
@Qwertiy, ну, полностью валидный указатель вроде бы возвращает new. Насколько я понял, делать вот так: B *p = new (this) D2; p->f(); — можно.
@Qwertiy, не знаю зачем это сделано, но запрет распространяется на "старые" указатели. То есть на те указатели, которые "не знают", что объект, адрес которого они первоначально представляли больше не существует.
 
@wololo разве new возвращает не аргумент?
@wololo хм.. множественное наследование?
 
9:52 AM
@Qwertiy, да аргумент, да, возвращённый new указатель представляет тот же самый адрес, однако, концептуально это другой указатель.
Вообще, всё написанное — это мои попытки понять стандарт. Очевидно, могу быть не прав.
 

« first day (1 day earlier)    last day (15 days later) »