При использовании различных API, которые имеют структуры с переменным размером (структуры, которые должны быть выделены как byte [], а затем отбрасываются в структуру), было бы неплохо, если бы владелец unique_ptr мог указать на структуру, поскольку это то, что мы будем использовать.
Пример:
std::unique_ptr<VARIABLE_SIZE_STRUCT[]> v;
v.reset(reinterpret_cast<VARIABLE_SIZE_STRUCT*>(new BYTE[bytesRequired]));
Это позволило `v предоставить представление самой структуре, что предпочтительнее, потому что нам не нужна вторая переменная, и мы не заботимся о указателе байта, кроме удаления.
Проблема заключается в возможности размытия указателя на литье (что делает его небезопасным для свободного). Я не вижу разумной причины, по которой компилятор изменил бы значение указателя на литье (так как наследования нет), но я слышал, что стандарт оставляет за собой право разыгрывать любой указатель на любой актерский состав, так как это касается стандартного кодирования, это подход выходит из окна, не так ли? Или есть какая-то причина, это безопасно? Есть ли способ, по крайней мере, static_assert, или каким-либо другим способом сделать его безопасным или чисто связанным с этим типом структуры?