std::vector<char> data;
обрабатывает свою собственную память, которая содержит char
, не связанную с C
.
C* newC = new(&data[0]) C;
вызовите конструктор C
, (который выделяет).
Когда newC
покидает область видимости, деструктор C
НЕ вызывается. (newC
- это просто указатель, а не C
)
cAgain->~C();
вызов деструктора C
(хорошо). Что касается newC
, когда область видимости заканчивается, не вызывается (дополнительный) деструктор C
.
Таким образом, предполагая правильное выравнивание и смещение между newC
и cAgain
правильным , ваш код в порядке, без утечек.