【问题标题】:Who owns values passed as pointers to Windows API functions?谁拥有作为指向 Windows API 函数的指针传递的值?
【发布时间】:2020-04-21 13:03:28
【问题描述】:

目前我正在查看PrjFillDirEntryBuffer() 函数的fileBasicInfo 参数。它是一个指向结构的指针。一旦我创建了一个结构并将其传递给函数,谁负责释放该结构的内存?我猜它是调用者,因为我认为该函数不会在任何地方保存对结构的引用,但我不知道如何确定。有规律吗?它是否记录在某处?

【问题讨论】:

  • 建议:大部分时候可以自动分配结构,用完就让结构超出范围。
  • 查看文档。很少有函数分配、传输或释放资源,而且它们都明确表示。
  • 一般来说,默认情况下,您传递给 API 函数的指针(无处不在,不仅在 Windows API 中)被认为归您所有,并且您应该负责管理这些对象。当 API 开始拥有它们时,通常会在 API 文档中特别提及。
  • 愚蠢的规则:创建资源的人应该释放它。
  • @9072997 是预分配的,不是预填充的。如果它已经被填充,则无需调用填充函数来填充它。..

标签: c++ winapi


【解决方案1】:

该函数只是填充您提供给它的PRJ_FILE_BASIC_INFO 结构。它无法知道结构是如何分配的,因此它无法为您释放结构。因此,您负责在调用函数之前分配结构,并在不再需要时释放结构。您选择如何分配/释放它取决于您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2010-11-19
    相关资源
    最近更新 更多