C++ 如果我们不';不要使用DeleteObject

C++ 如果我们不';不要使用DeleteObject,c++,winapi,gdi,C++,Winapi,Gdi,我们必须使用DeleteObject函数来删除GDI对象 但是如果我们不删除通过CreatePen函数创建的GDI笔,会发生什么 但是如果我们不删除通过CreatePen函数创建的GDI笔,会发生什么呢 那么与资源关联的资源将不会被释放。 你的内存泄漏了 打开任务管理器 转到“详细信息”选项卡(或Windows 7及更早版本中的“进程”选项卡) 显示“GDI对象”列 在不删除GDI对象的情况下运行您的流程,最好是在紧密循环中运行 观察您的进程“GDI对象数将持续增加” 最终你会成功的。每个进程的

我们必须使用
DeleteObject
函数来删除GDI对象

但是如果我们不删除通过
CreatePen
函数创建的GDI笔,会发生什么

但是如果我们不删除通过CreatePen函数创建的GDI笔,会发生什么呢

那么与资源关联的资源将不会被释放。 你的内存泄漏了

  • 打开任务管理器
  • 转到“详细信息”选项卡(或Windows 7及更早版本中的“进程”选项卡)
  • 显示“GDI对象”列
  • 在不删除GDI对象的情况下运行您的流程,最好是在紧密循环中运行
  • 观察您的进程“GDI对象数将持续增加”
  • 最终你会成功的。每个进程的限制(Windows 8.1中为10000)或GDI对象的会话限制65535
  • 然后,您将开始看到奇怪的视觉瑕疵和小故障,因为不仅在您的流程中,而且在其他也使用GDI的流程中(特别是Internet Explorer 8或更早版本,它特别重GDI)
  • 假设您的进程没有崩溃,您就会明白为什么要清理GDI对象:)

  • 然后,你泄漏了资源。这是旧版本Win的一个大问题,特别是大多数应用程序都是在不安全的环境中创建的,即原始Win APIReasorce泄漏不是唯一的内存泄漏。