c++ - 如果 A 有析构函数,std::unique_ptr 什么时候需要特殊的删除器?
问问题
3040 次
1 回答
14
std::unique_ptr<T>
will call的默认删除器和 will calldelete
的默认删除器std::unique_ptr<T[]>
将delete[]
适当地调用对象的析构函数。
可能发生的情况是,需要在销毁之前安排一个操作,或者因为析构函数不完整(或缺少),或者因为您想要做更多的事情(例如,一些日志记录)。在这种情况下,您需要一个专用的删除器来实现这一点。
例如,假设给您一个句柄,例如FILE*
(C 中常见)。这些句柄通常带有某种close
方法并且没有析构函数(因为在 C 中没有析构函数)。
struct FileCloser {
void operator()(FILE* f) { if (f) { fclose(f); } }
};
UniqueFile = std::unique_ptr<FILE, FileCloser>;
于 2013-07-24T07:54:52.050 回答