当我将 win32 程序中的数据复制到剪贴板时,是否应该在将其粘贴到其他位置后释放复制到剪贴板的内存?或者系统对此负责。
4 回答
将数据放在剪贴板上有两种方法。
方法一:直接把数据放到剪贴板上,第二个参数调用SetClipboardData
传入一个非NULL
值。在这种情况下,系统将对数据负责,您不应自行释放它。
方法2SetClipboardData
:通过调用并NULL
作为第二个参数传递,将占位符放到剪贴板上。在这种情况下,应用程序对数据负责,直到它SetClibpoardData
使用非NULL
第二个参数调用该点,此时责任转移到操作系统。
从您的问题中不清楚您使用的是哪种方法。
阅读文档:
如果 SetClipboardData 成功,则系统拥有由 hMem 参数标识的对象。所有权转移到系统后,应用程序可能无法写入或释放数据
跟踪剪贴板数据以便在关闭应用程序时将其从剪贴板中删除是完全可选的。一旦数据在剪贴板上,系统就拥有它并且它与您的应用程序是分开的,因此您可以选择将其保留在剪贴板上,以便在您的应用程序关闭后它仍然可以继续使用。除非您使用延迟渲染,否则在这种情况下,在关闭您的应用程序时将其从剪贴板中删除是有意义的,因为您的应用程序将不再运行以在其他应用程序请求时渲染数据。
您的应用程序负责处理剪贴板上的数据(如果将其放在那里)。这就是为什么很多应用程序(例如 Microsoft Office)在您退出应用程序时会询问您是否要在剪贴板上保留大量数据。
但是,我强烈建议用户交互,因为您不知道用户以后是否需要剪贴板上的数据。
它通常由系统完成,但是,一些负责任的应用程序也会要求用户在离开之前释放剪贴板。
例如,MSWord 会在退出前询问用户是否将数据保存在内存中。出于一般目的,您可以将其留给系统。
请记住,用户可能希望将其保留在剪贴板中(即使在关闭应用程序之后),因此您不应对其进行破坏并将其从内存中删除。