函数
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
。