当我在我的win32程序中将数据复制到剪贴板时,我是否应该在将其粘贴到其他地方后释放我复制到剪贴板的内存?还是系统会负责这个呢?
有两种方法可以将数据放入剪贴板。
方法1:通过调用SetClipboardData
并将非 NULL
值作为第二个参数传递,直接将数据放到剪贴板上。在这种情况下,系统将负责数据的处理,您不应自行释放它。
方法2:通过调用SetClipboardData
并将NULL
作为第二个参数传递,将一个占位符放入剪贴板中。在这种情况下,应用程序要负责处理数据,直到它使用非NULL
的第二个参数调用SetClibpoardData
,此时责任转移到操作系统。
从您的问题中无法确定您使用的是哪种方法。
阅读文档:
如果SetClipboardData成功,系统将拥有由hMem参数标识的对象。 应用程序一旦所有权已转移给系统,就不能再写入或释放数据。
跟踪剪贴板数据以便在关闭应用程序时从剪贴板中删除它是完全可选的。 一旦数据位于剪贴板上,系统就拥有了它,并且与您的应用程序分开,因此您可以选择将其留在剪贴板上,以便在关闭应用程序后继续使用。 除非您正在使用延迟呈现(delayed rendering),在这种情况下,在关闭应用程序时将其从剪贴板中删除是有意义的,因为您的应用程序将不再运行以呈现其他应用程序请求的数据。
通常由系统完成,但一些负责任的应用程序也会在离开前要求用户释放剪贴板。
例如,MSWord将在退出前询问用户是否保留内存中的数据。对于一般用途,您可以将其留给系统处理。
请记住,用户可能希望将其保留在剪贴板中(即使在关闭应用程序后),因此您不应该干扰它并将其从内存中删除。
SetClibpoardData
和非NULL
数据参数放置,则操作系统负责数据,而不是应用程序。 "如果 SetClipboardData 成功,则系统拥有由 hMem 参数标识的对象。一旦所有权已转移给系统,应用程序将无法写入或释放数据。" - Raymond Chen