18 Feb
2022
18 Feb
'22
3:55 p.m.
On 2/18/22 18:15, Andrea Bocci wrote:
Hi Andrey, now I'm curious... is
alignas(int) unsigned char storage[sizeof(int)]; int* p1 = new (storage) int(1); int* p3 = new (storage) int(3); std::printf("%d\n", *p1);
different from
int* p1 = new int(1); int* p3 = new (p1) int(3); std::printf("%d\n", *p1);
or even
int p1 = 1; int* p3 = new (&p1) int(3); std::printf("%d\n", p1);
?
In the examples above, you're reusing storage of the object with a different object of the same type, that is the old object is "transparently replaceable" by the new one. See here: https://en.cppreference.com/w/cpp/language/lifetime#Storage_reuse In this case, p1 remains valid and can be used to access the new object.