unique_ptr析构函数的优势

达米安

与仅在C ++ 11中直接关闭文件相比,使用unique_ptr析构函数有什么好处?

即此代码

FILE* p = fopen("filename","r");
unique_ptr<FILE, int(*)(FILE*)> h(p, fclose);
if (fclose(h.release()) == 0)
    p = nullptr;

FILE* p = fopen("filename","r");
fclose(p)
本·沃格特

不需要第一个代码块的最后两行。另外,您对文件不做任何事情。这就是优势变得明显的地方。

使用unique_ptr,您可以fclose()在打开文件时安排一次调用,而不必担心它。

使用C样式时,您之间会有很多代码fopen()fclose()并且必须确保所有代码都不能跳过fclose()

这是一个更现实的比较:

typedef std::unique_ptr<FILE, int(*)(FILE*)> smart_file;
smart_file h(fopen("filename", "r"), &fclose);
read_file_header(h.get());
if (header.invalid) return false;
return process_file(h.get());

FILE* p = fopen("filename","r");
try {
   read_file_header(p);
}
catch (...) {
   fclose(p);
   throw;
}
if (header.invalid) {
    fclose(p);
    return false;
}
try {
    auto result = process_file(p);
    fclose(p);
    return result;
}
catch (...) {
   fclose(p);
   throw;
}

跳跃在fclose()可以采取多种形式:returnifbreakcontinuegotothrow使用智能指针时,C ++编译器将处理所有这些代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

std :: unique_ptr析构函数构造函数顺序

unique_ptr :: release()是否调用析构函数?

使用unique_ptr保护的析构函数

unique_ptr 两次调用析构函数

为什么来自unique_ptr析构函数的异常会终止程序?

std :: unique_ptr是否在其析构函数中将其基础指针设置为nullptr?

用于 pimpl 的 Unique_ptr 用法 - 即使声明了析构函数也不会编译

std::unique_ptr 在虚拟析构函数上重置 SIGABRT

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

在具有受保护的析构函数的类中使用unique_ptr

thread_local std :: unique_ptr版本未调用析构函数

静态unique_ptr两次调用析构函数

具有unique_ptr成员和自定义析构函数的对象的向量

为什么在使用unique_ptr时没有调用析构函数?

当基类具有受保护的析构函数时,创建unique_ptr <Base>

如果A有析构函数,std :: unique_ptr <A>什么时候需要特殊的删除器?

如何允许 std::unique_ptr 访问类的私有析构函数或使用私有析构函数实现 C++ 工厂类?

是unique_ptr构造函数初始化原始指针,还是unique_ptr析构函数删除关联的原始指针?

使用std :: map时,包含unique_ptr的结构中的默认析构函数会导致编译错误

为什么要为具有非平凡析构函数的类声明constrexpr构造函数(例如unique_ptr,std :: variant)

我应该在c ++ 11中的析构函数中清除unique_ptr的向量,即使valgrind不显示内存泄漏

当析构函数在类主体中声明为unique_ptr作为同一类的成员时发生编译器错误

为什么通过添加空的析构函数来修复“错误:使用unique_ptr将'sizeof'无效应用到不完整类型”的问题?

std :: unique_ptr的自定义删除程序是否是手动调用析构函数的有效位置?

具有显式析构函数和std :: unique_ptr <>成员的类不能在std :: vector <>中使用吗?

与auto_ptr相比,unique_ptr有何优势?

删除函数unique_ptr

从函数返回unique_ptr

析构函数中的析构函数?

TOP 榜单

热门标签

归档