Чтобы остановить аргумент, продолжающийся в комментариях к ответ, который я недавно дал , я хотел бы получить конструктивные ответы на следующие вопросы:
Пример кода, сделанный Беном Фойгтом и упрощенный (запустите его на ideone.com ]):
#include
#include
struct something
{
int i;
};
int main(void)
{
char buffer[sizeof (something) + 40];
something* p = new (buffer) something;
p->i = 11;
int& outlives = p->i;
std::cout << outlives << "\n";
p->~something(); // p->i dies with its parent object
new (p) char[40]; // memory is reused, lifetime of *p (and p->i) is so done
new (&outlives) int(13);
std::cout << outlives << "\n"; // but reference is still alive and well
// and useful, because strict aliasing was respected
}