6
4

1 回答 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 回答