Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Для начала опеределимся с терминологией — далее именуемый в стандарте new-expression я буду называть «оператор new» (...), а operator new я так и буду называть operator new. (...)
оператор new — это оператор языка, такой же как if, while и т.д. (хотя if, while и т.д. все же именуются как statement, но отбросим лирику)
не каждый С++'ник может «на пальцах» объяснить где и как вызывается конструктор при использовании new, поэтому
Какой профит?
Прочитав про две разные сущности, ожидал дальше увидеть два разных примера применения каждой из них.
Как можно воспользоваться этим различием… в процессе разработки?
operator new (msvc10):_C_LIB_DECL
int __cdecl _callnewh(size_t size) _THROW1(_STD bad_alloc);
_END_C_LIB_DECL
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
{ // try to allocate size bytes
void *p;
while ((p = malloc(size)) == 0)
if (_callnewh(size) == 0)
{ // report no memory
static const std::bad_alloc nomem;
_RAISE(nomem);
}
return (p);
}
operator new просто выделяет память, причём тем-же malloc — при неудачном выделении памяти — вызывает new_handler функцию и только потом (если ничего не изменилось) бросает исключение. char *ptr = (char*) malloc(10);
memset(ptr, 1, 10);
char* ptrPlacement = new(ptr) char[10];
ptrPlacement[9]=10;
free(ptr);
[C++] Всё ли мы знаем об операторах new и delete?