函数

GLibclear_pointer

自:2.34

声明 [src]

void
g_clear_pointer (
  gpointer* pp,
  GDestroyNotify destroy
)

描述 [src]

清除对变量的引用。

pp 不能为 NULL

如果引用为 NULL,则此函数不执行任何操作。否则,使用 destroy 销毁变量,并将指针设置为 NULL

还包含了一个宏,该宏允许在不进行指针类型转换的情况下使用此函数。这将掩盖任何关于不兼容函数类型或调用约定的警告,因此必须确保 destroy 函数与通过 GLib 所编译的平台的标准调用约定作为 GDestroyNotify 来调用兼容;否则,程序将出现未定义的行为。

此类未定义行为的示例包括使用许多 Windows Win32 API,以及在 32 位 Windows 上(如果不是全部)的许多(如果不是全部)OpenGL 和 Vulkan 调用,它们通常使用 __stdcall 调用约定,而不是 __cdecl 调用约定。

受影响的函数可以通过将它们包装在用标准调用约定声明的 GDestroyNotify 中来使用

// Wrapper needed to avoid mismatched calling conventions on Windows
static void
destroy_sync (void *sync)
{
  glDeleteSync (sync);
}

// …

g_clear_pointer (&sync, destroy_sync);

自 2.34 起提供

语言绑定不能直接使用此函数。

参数

pp

类型: gpointer*

指向变量、结构成员等保存指针的指针。

参数将被函数修改。
destroy

类型: GDestroyNotify

可以向当中传递 gpointer 的函数,用于销毁 *pp