Создавая поверх уже построенного объекта, вы нарушаете гарантии языка по уничтожению, поэтому я бы не стал этого делать, независимо от того, является ли объект POD.
Интересно, пытались ли вы спросить о чем-то немного ином:
any_pod* p = reinterpret_cast<any_pod*>(malloc(n * sizeof(any_pod[n]));
for (std::size_t i = 0; i < n; ++i)
new (&p[i].member) other_pod(whatever);
В этом случае вы не восстанавливаете, а просто создаете блок необработанной памяти. В этом случае размещение нового целесообразно. (Хотя довольно редко вам приходится писать код, подобный этому. Это тот тип вещей, который вы можете сделать при реализации чего-то вроде std :: vector.) Вы должны быть очень осторожны, чтобы освободить массив позже, когда последний модуль имеет был разрушен.