我应该释放我复制到剪贴板的内存吗?

时间:2013-04-16 11:57:37

标签: winapi memory

当我将win32程序中的数据复制到剪贴板时,在将其粘贴到其他地方后,我是否应该释放复制到剪贴板的内存?或者系统对此负责。

4 个答案:

答案 0 :(得分:7)

有两种方法可以将数据放在剪贴板上。

方法1 :通过调用SetClipboardData并将非NULL值作为第二个参数传递,将数据直接放到剪贴板上。在这种情况下,系统将对数据负责,您不应该自己释放它。

方法2 :通过调用SetClipboardData并将NULL作为第二个参数传递,将占位符放在剪贴板上。在这种情况下,应用程序负责数据,直到它使用非{​​{1}}秒参数调用SetClibpoardData,此时责任转移到操作系统。

您的问题并不清楚您使用的是哪种方法。

答案 1 :(得分:3)

Read the documentation

  

如果SetClipboardData成功,则系统拥有hMem参数标识的对象。一旦所有权转移到系统,应用程序可能无法写入或释放数据

跟踪剪贴板数据,以便在关闭应用程序时将其从剪贴板中删除,这是完全可选的。一旦数据在剪贴板上,系统就拥有它并且它与您的应用程序是分开的,因此您可以选择将其保留在剪贴板上,以便在您的应用关闭后仍可继续使用。除非您使用延迟渲染,否则在关闭应用程序时将其从剪贴板中删除是有意义的,因为在其他应用程序请求时,您的应用程序将不再运行以呈现数据。

答案 2 :(得分:1)

您的应用程序负责处理剪贴板上的数据(如果它放在那里)。这就是许多应用程序(如Microsoft Office)在您退出应用程序时询问您是否要在剪贴板上保留大量数据的原因。

我强烈建议用户互动,因为你不知道用户以后是否需要剪贴板上的数据。

答案 3 :(得分:0)

通常由系统完成,但是一些负责任的应用程序也会在离开之前要求用户释放剪贴板。

e.g。 MSWord会要求用户在退出之前将数据保存在内存中。 出于一般目的,您可以将其留给系统。

请记住,用户可能希望将其保留在剪贴板中(即使在关闭应用程序之后),因此您不应该使用它并将其从内存中删除。