如果类A
中unique_ptr<A>
有自己的析构函数,是否有必要声明一个删除程序以确保唯一指针使用该析构函数?我想的例子是A
有一个成员mx
类型user_matrix
(我刚刚写的一个名字),该成员需要调用一个函数free(...)
来释放其内存,一个可以定义
~A(){ user_matrix::free(mx); /*etc*/}
既然default_deleter<>
会打电话delete
,那应该是我的理解~A()
。但是,Josuttis(C ++ Standard Library:A Tutorial and Reference)书的“相关资源的删除”下的5.2节中打开和关闭目录的示例表明,可能需要声明一个特殊的删除器才能执行此操作这,所以让我感到困惑。...这是因为在给定的示例中,该类DIR
没有使用的析构函数closedir(...)
?
默认的delete的std::unique_ptr<T>
will调用delete
和默认的delete的std::unique_ptr<T[]>
will调用delete[]
,那些将适当地调用对象的析构函数。
可能发生的情况是,需要在销毁之前立即安排一个操作,这是因为析构函数不完整(或缺少),或者是因为您想做更多的事情(例如,某些日志记录)。在这种情况下,您需要专用的删除器来实现此目的。
例如,假设给您一个handle,如FILE*
(在C语言中很常见)。这些句柄通常带有某种close
方法并且没有析构函数(因为C中没有)。
struct FileCloser {
void operator()(FILE* f) { if (f) { fclose(f); } }
};
UniqueFile = std::unique_ptr<FILE, FileCloser>;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句