вопрос такой, коректно ли следующее использование, нет ли в нем опасности, и верно ли я понял что оператор new(void*, size_t) ваяет обьект на уже выделенную (до его вызова) память?
class BaseM{
const string str;
public:
BaseM(const char* str_) : str(str_) {
cout << " create: " << str.c_str() << endl;
}
void show_str() const {
cout << str.c_str() << endl;
}
~BaseM(){
cout << " delete " << str.c_str() << endl;
}
};
int main()
{
char* ptr_arena = new char[sizeof(BaseM) * 3];
cout << "ptr_arena: " << ((void*) ptr_arena) << endl; ///***
BaseM* ptr_1 = new (ptr_arena) BaseM("string #1");
BaseM* ptr_2 = new (ptr_arena + sizeof(BaseM)) BaseM("string #2");
BaseM* ptr_3 = new (ptr_arena + sizeof(BaseM) * 2) BaseM("string #3");
for(int i = 0; i < 3; ++i){
cout << " sdress: " << (reinterpret_cast<BaseM*>(ptr_arena) + i) << ", ";
(reinterpret_cast<BaseM*>(ptr_arena) + i)->show_str();
}
ptr_3 = new (ptr_arena + sizeof(BaseM) * 2) BaseM("string #3777");
for(int i = 0, j = 0; i < 3 ; ++i){
reinterpret_cast<BaseM*>(ptr_arena + j)->show_str();
j += sizeof(BaseM);
}
return 0;
}