Если вы используете shared_ptr
или unique_ptr
, вы можете указать пользовательское средство удаления.Например,
struct free_delete
{
void operator()(void* x) { free(x); }
};
Это можно использовать с shared_ptr
следующим образом:
std::shared_ptr<int> sp((int*)malloc(sizeof(int)), free_delete());
Если вы используете unique_ptr
, средство удаления является частью unique_ptr
тип, поэтому в качестве аргумента шаблона необходимо указать средство удаления:
std::unique_ptr<int, free_delete> up((int*)malloc(sizeof(int)));
Однако при написании C ++ лучше использовать исключения, а не избегать их, особенно в отношении ошибок выделения.,В большинстве случаев вы не можете успешно восстановиться после сбоя выделения в функции, пытающейся выполнить выделение, поэтому исключения могут помочь вам обработать ошибку, если вы действительно способны ее обработать.