Делиторы (deleters) в умных указателях позволяют определить пользовательскую логику освобождения ресурса, на который указывает умный указатель. По умолчанию std::unique_ptr использует delete, а std::shared_ptr — delete или delete[]. Делитор может быть функцией, функтором или лямбда-выражением.
Примеры:
std::unique_ptr с функцией-делитором:
cpp
std::unique_ptr с лямбда-делитором:
cpp
std::shared_ptr с лямбда-делитором:
cpp
Роль делиторов важна в следующих сценариях:
delete[] для массивов или пула объектов.Для std::unique_ptr, тип делитора является частью типа указателя, что может усложнить работу с полиморфизмом. Для std::shared_ptr, тип делитора не является частью типа указателя, что обеспечивает лучшую гибкость.