函数

GLibListcopy_deep

自:2.34

声明 [src]

GList*
g_list_copy_deep (
  GList* list,
  GCopyFunc func,
  gpointer user_data
)

描述 [src]

创建一个与 GList 完全相同(深度复制)的副本。

g_list_copy() 不同,此函数不仅复制列表容器本身,而且还使用 func 来复制每个列表元素。

func,作为一个 GCopyFunc,接受两个参数:要复制的数据以及一个指向 user_data 的指针。在常见的处理器架构上,如果复制函数只接收一个参数,则可以将 user_data 设置为 NULL,这是安全的。但是,如果您使用带有 -Wcast-function-type 警告的 GCC 编译,则可能会收到编译器警告。

例如,如果 list 包含一组 GObjects,您可以这样做:

another_list = g_list_copy_deep (list, (GCopyFunc) g_object_ref, NULL);

为了完全释放新列表,您还可以这样做:

g_list_free_full (another_list, g_object_unref);

自:2.34

此函数不直接提供给语言绑定使用。

参数

list

类型:指向 gpointer 的指针列表

GList,该指针必须指向列表的顶部。

数据由函数的调用者拥有。
func

类型:GCopyFunc

一个复制函数,用于复制列表中的每个元素。

user_data

类型:gpointer

传递给复制函数 func 的用户数据,或 NULL

参数可以是 NULL
数据由函数的调用者拥有。

返回值

类型:指向 gpointer 的指针列表

新列表的开头包含了对 list 的完整副本,可以使用 g_list_free_full() 来释放它。

数据由被调用函数拥有。