我已经全神贯注,无法找到一个好的答案 - 也许没有使用正确的搜索字词 - 所以 - 如何检查unique_ptr的自定义删除器是否失败,你如何处理错误?我试图通过创建ZipArchive类来包装libzip。在libzip中,使用以下函数关闭文件:
int zip_close(zip_t* archive);
成功时返回0,失败返回-1,并在" archive"中设置错误条件。我知道这很容易用原始指针完成,但我试图使用unique_ptr:
typedef std::unique_ptr<zip_t, int(*)(zip_t*)> UniqueArchive;
以后
mArchive = UniqueArchive(pointer_to_archive, zip_close);
(mArchive是ZipArchive类的私有成员)
稍后,当ZipArchive被销毁并且清理了mArchive时,你会如何制作它以便检查zip_close是否成功?现在我可以想到将zip_close包装在一个有一些错误处理的函数中 - 可能会抛出一个异常,但你怎么能检查呢?如果出现错误,那么它会从析构函数中抛出一个异常吗?
无论如何 - 希望我的问题有意义 - 感谢任何指导!