Почему и когда мне нужно поставлять собственный дебит? Не ключевое слово delete
достаточно достаточно?
Если вы используете интеллектуальный указатель для управления ресурсом, отличным от памяти, выделенной
new
, не забудьте передать дебетер.
Обновить:
Как спрашивается в комментариях, причина, по которой я неясна о цитируемом тексте и примере, заключается в том, что я неправильно думал о чем-то, что я думал о умном указателе, только придумано для/связанного с управлением динамической памятью. Таким образом, пример использует интеллектуальный указатель для управления нединамической памятью, что меня смущает.
Хорошее объяснение от старшего:
Умный указатель совсем не заботится о том, что это динамическая память как таковая. Это просто способ отслеживать что-то, пока оно вам нужно, и уничтожать это, когда оно выходит за рамки. Точка упоминания файловых дескрипторов, сетевых подключений и т.д. Заключалась в том, что они не являются динамической памятью, но умный указатель может управлять ими в любом случае.
C++ Primer 5th принимает псевдо-сетевое соединение (не определяют деструкторы) для иллюстрации.
Плохой:
struct destination; // represents what we are connecting to
struct connection; // information needed to use the connection
connection connect(destination*); // open the connection
void disconnect(connection); // close the given connection
void f(destination &d /* other parameters */)
{
// get a connection; must remember to close it when done
connection c = connect(&d);
// use the connection
// if we forget to call disconnect before exiting f, there will be no way to closes
}
Хорошо:
void end_connection(connection *p) { disconnect(*p); }
void f(destination &d /* other parameters */)
{
connection c = connect(&d);
shared_ptr<connection> p(&c, end_connection);
// use the connection
// when f exits, even if by an exception, the connection will be properly closed
}
Полный скриншот контекста (я очищаю некоторые несвязанные тексты):