如何为在Win32 c ++应用程序中具有HANDLE作为成员的类编写copyconstructor?

yes*_*aaj 1 c++ winapi copy-constructor

我有一个HANDLE作为我班上的成员说它是使用win32 api的文件句柄,我如何在复制构造函数中处理它,我的班级是否负责照顾释放它?

Amb*_*jak 6

您遇到此问题是因为您正在尝试为包含抽象资源(而不是值)的类定义复制构造函数.您必须从复制构造函数中确定实际需要的行为.也许你甚至不希望这个类首先是可复制构造的.

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

另一方面,如果类表示临时文件,则可能需要不同的语义- 也许复制构造函数复制整个文件会很有用,这样您的类的副本就不会干扰原始文件.或者这种行为可能过于隐含,并且您认为该类不具有复制构造函数,而是您必须显式使用复制方法.

所以,除非你解释你正在做什么,以及你打算如何使用这个课程,否则没有"正确"的答案.