在预定义的注册表密钥手柄上调用regclosekey
Invoking RegCloseKey on a predefined registry key handle
考虑围绕RAW HKEY
手柄的C 包装类别的情况。
包装器类具有构造函数过载,以HKEY
句柄作为输入:构造对象具有输入原始句柄的所有权。
destructor在包装手柄上调用RegCloseKey()
,存储在HKEY m_hKey
数据成员中。
现在,考虑将诸如HKEY_CURRENT_USER
之类的预定义手柄传递给构造函数超载的情况。HKEY_CURRENT_USER
值分配给m_hKey
成员。
Destructor在该预定义的键上调用RegCloseKey()
。在我的实验中,API在这种情况下返回0,含义为:成功。那么,在预定义的注册表密钥手柄上致电RegCloseKey()
是否可以?或应进一步进行检查,例如:
RegistryKey::~RegistryKey()
{
if ((m_hKey != nullptr) && !IsPredefinedKey(m_hKey))
::RegCloseKey(m_hKey);
}
RegOpenKey
功能的MSDN文档您只想在编程中创建的句柄上调用RegCloseKey
。
... 如果密钥不是预定义注册表键之一,请在使用句柄完成后调用RegCloseKey
函数。
我找不到说这没关系的官方文档,但我知道它有效。
我最接近这本书:
您实际上可以在一个预定义的根键条目之一上调用regclosekey。
它可能在野外发生了很多事情,所以我无法想象Microsoft将来会改变这一点,但是如果您不想冒险,则确实取决于您。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- 在预定义的注册表密钥手柄上调用regclosekey
- RegCloseKey()函数应该只在RegOpenKey()调用成功后使用,还是无条件使用?