c++ - 如何在 win32 C++ 应用程序中为具有 HANDLE 作为成员的类编写复制构造函数?

标签 c++ winapi copy-constructor

我的类(class)成员有一个句柄说它是使用 win32 api 获得的文件句柄,我如何在复制构造函数中处理它,我的类(class)是否负责释放它?

最佳答案

您遇到此问题是因为您试图为包含抽象资源(而不是值)的类定义复制构造函数。你必须决定你真正想要从你的复制构造函数中得到什么行为。也许您一开始甚至不希望该类是可复制构造的。

例如,假设您的类封装了一个打开的只读文件。然后,复制构造函数调用 DuplicateHandle(如 Matt 所建议的)以及析构函数调用 CloseHandle 是有意义的。原始实例和复制实例之间不会有干扰,因为您不会写入文件。

另一方面,如果该类表示一个临时文件,则可能需要不同的语义 - 也许复制构造函数复制整个文件会很有用文件,这样你的类(class)的拷贝就不会干扰原来的。或者,也许这种行为感觉过于含蓄,您决定该类将没有复制构造函数,而必须显式使用复制方法。

因此,除非您解释您到底在做什么,以及您打算使用该类(class)的方式,否则没有“正确”的答案。

关于c++ - 如何在 win32 C++ 应用程序中为具有 HANDLE 作为成员的类编写复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215055/

相关文章:

Java内存映射文件?

c++ - 在复制构造函数内调用动态分配的类的复制构造函数?

c++ - STL TR1 为 gcc 提供文档

android - 从 java 调用 native 方法时的 Libc SIGSEGV

c++ - 为什么我的迭代次数少于预期?

c++ - 对类使用 '=' 而无需在 C++ 中定义 '=' 运算符

c++ - memcpy 是可简单复制的类型构造还是赋值?

C++ 包装重载函数

c++ - 没有对话框的编辑控件上的 SHAutoComplete

c++ - 获取 Windows 监视器的唯一标识符