Определено ли поведение для размещения-нового тривиально разрушаемого базового объекта производного?
struct base { int& ref; };
struct derived : public base {
complicated_object complicated;
derived(int& r, complicated_arg arg) :
base {r}, complicated(arg) {}
};
unique_ptr<derived> rebind_ref(unique_ptr<derived>&& ptr,
int& ref) {
// Change where the `ref` in the `base` subobject of
// derived refers.
return unique_ptr<derived>(static_cast<derived*>(
::new (static_cast<base*>(ptr.release()) base{ref}));
}
Обратите внимание, что я попытался структурировать rebind_ref
так, чтобы не нарушать каких-либо строгих предположений об алиасинге, которые мог бы сделать компилятор.
int *ref
в этом случае. производный класс может быть написан, предполагая, что ref никогда не меняется. - person user685684   schedule 19.10.2018