gpt4 book ai didi

C - 构造函数,返回结构更好还是指向结构的指针更好?

转载 作者:行者123 更新时间:2023-11-30 16:57:29 26 4
gpt4 key购买 nike

我目前正在用 C 语言制作 RedBlackTree,但在为结构提供构造函数时,我仍然不明白哪一个更好/更理想。

struct RedBlackTree* RedBlackTree_new()
{
struct RedBlackTree *tree = calloc(1, sizeof(struct RedBlackTree));
if (tree == NULL)
error(DS_MSG_OUT_OF_MEM);
return tree
}

VS。

struct RedBlackTree RedBlackTree_new()
{
struct RedBlackTree tree;
tree.root = NULL;
tree.size = 0;
return tree;
}

我的意思是,如果我选择第二个选项,那么我必须不断地使用 & 将它作为指针传递到我的函数中,据我所知,在我的程序结束之前我永远无法销毁它(有人可以验证这是否属实吗?)。例如,如果我的树有一个destroy函数,那么我将无法释放从RedBlackTree内的结构分配的内存(如果它们不是用malloccalloc 对吗?

此外,在更一般的情况下,两者的优点和缺点是什么?我总是可以使用 * 从指针检索数据,并且我总是可以使用 & 将数据转换为指针,所以感觉它们几乎可以完全互换一种感觉。

最佳答案

真正的区别是对象的生命周期。通过动态分配(malloc/callocfree)在堆上分配的对象将一直存在,直到被显式释放为止。

相反,具有自动存储功能的对象(如第二个示例中所示)仅在声明它的范围内生存,并且必须将其复制到其他地方才能使其生存。

因此,这应该可以帮助您选择更适合特定情况的选项。

从效率的角度来看,动态分配成本更高,并且需要额外的间接寻址,但允许您传递指针,这可以防止数据被复制,因此在其他情况下可以更有效,例如。当对象很大并且复制成本很高时。

关于C - 构造函数,返回结构更好还是指向结构的指针更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com