Использовать новое место размещения.
std::vector<char> memory(sizeof(Myclass));
void* place = &memory[0];
Myclass* f = new(place) Myclass();
Не используйте метод, определенный в FAQ:
char memory[sizeof(Myclass)]; // No alignment guarantees on this.
Как отмечено в FAQ, это опасно, так как стандарт не предусматривает выравнивания этой памяти. Использование стандартного вектора дает вам гарантии выравнивания, поскольку раздел данных вектора выделяется динамически, а стандарт предоставляет гарантии выравнивания динамически выделяемой памяти.
От: n2521 (копия у меня на рабочем столе) Раздел: 3.7.3.1
Возвращаемый указатель должен быть соответствующим образом выровнен, чтобы его можно было преобразовать в указатель любого полного типа объекта с фундаментальным требованием выравнивания (3.11), а затем использовать для доступа к объекту или массиву в выделенной памяти (до тех пор, пока память не будет явно освобождена вызов соответствующей функции освобождения).
Что указывает нам на 3.11
3.11 Мировоззрение [basic.align]
5 Мировоззрения имеют порядок от более слабого к более сильному или более строгому мировоззрению. Более строгие выравнивания имеют большие значения выравнивания. Адрес, который удовлетворяет требованию выравнивания, также удовлетворяет любому более слабому требованию действительного выравнивания.
Не забудьте вручную вызвать деструктор:
f->~Myclass()
person
Martin York
schedule
15.07.2010