Как выполнить новую операцию размещения с помощью летучего указателя.
Например, я хочу сделать что-то вроде этого:
volatile SomeStruct Object;
volatile SomeStruct* thing = &Object;
new (thing) SomeStruct(/*arguments to SomeStruct constructor*/);
Я знаю, что это сработает, если не будет ключевого слова volatile...... но как я могу это сделать с изменчивой переменной?
Примечание:
Размещение new определяется следующим образом:
void* operator new(size_t memoryRequested, void* pointer)
{
return pointer;
}
(Кстати, как GCC реализует его):
// Default placement versions of operator new.
inline void* operator new(std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT
{ return __p; }
Проблема в том, что я пытаюсь преобразовать thing
типа volatile SomeStruct*
в void*
, что недопустимо.
Например, если я изменил новый оператор на это:
void* operator new(size_t memoryRequested, volatile void* pointer)
{
return (void*)pointer;
}
Он будет компилироваться, но будет ссылаться на поведение undefined.