pep*_*ico 5 c++ raii ownership-semantics handle c++11
除指针外,句柄具有适当的语义。所以对我来说这样的例子(从零规则中提取):
class module {
public:
explicit module(std::wstring const& name)
: handle { ::LoadLibrary(name.c_str()), &::FreeLibrary } {}
// other module related functions go here
private:
using module_handle = std::unique_ptr<void, decltype(&::FreeLibrary)>;
module_handle handle;
};
Run Code Online (Sandbox Code Playgroud)
使用unique_ptr作为用于把手的所有权-在级封装“是一个坏的例子。首先,它利用内部知识,即句柄是指针类型,并使用它使unique_ptr“不透明”句柄类型建立在基本类型上。
句柄可以是任何类型,它们可能是一个指针,它们可能是一个索引或谁知道。最重要的是,您手头上的(例如来自大多数 C API)是一个句柄及其资源释放函数。
是否有适用于句柄语义的适当的“包内所有权” ?我的意思是,已经公开可供使用?
对我来说,unique_ptr等。阿尔。不起作用,我必须对句柄类型是什么做出不必要的假设,当我想要的只是通过不透明的句柄类型及其释放功能获得“包中的所有权”时。
通过查看句柄类型内部来构建此信息是没有意义的。这是一个手柄,应该没有关系。
创建一个特定的“智能指针”类,不会花很长时间。不要滥用图书馆课程。句柄语义与 C++ 指针的语义完全不同;一方面,取消引用 HANDLE 是没有意义的。
使用自定义智能句柄类的另一个原因 - NULL 并不总是意味着空句柄。有时是 INVALID_HANDLE_VALUE,这是不一样的。
免责声明:
这个问题重新表述并建立在这个问题的基础上:
| 归档时间: |
|
| 查看次数: |
3534 次 |
| 最近记录: |