вопрос такой, коректно ли следующее использование, нет ли в нем опасности, и верно ли я понял что оператор 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;
}
Ответ на:
комментарий
от Deleted
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от dilmah
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [C++] Перегрузка new и delete в производном классе (2011)
- Форум Содержит ли данный код UB? Попытка №2 (2018)
- Форум Укозатель на функцию член (2006)
- Форум Вопрос по С++ (2004)
- Форум Использование placement new (2014)
- Форум Содержит ли данный код UB? (2018)
- Форум vectror<const A*> (2015)
- Форум проблемы с std::variant of lambda (2020)
- Форум Третий день бьюсь над сегфолтом... (2013)
- Форум Валится на throw (2005)