gpt4 book ai didi

C++ 使用 . 和 . 之间有什么区别?或 -> 对于链表

转载 作者:太空狗 更新时间:2023-10-29 19:44:35 26 4
gpt4 key购买 nike

假设我有一个结构。

struct node {
string info;
node link*;

}

有什么区别

node k;
node b;

k.info = "string";
b.info = "string";
k.link = &b;

node *k;
node *b;
k = new node;
b = new node;
k->info = "string";
b->info = "string";
k->link = b;

在内存分配方面?这两个例子都正确并创建了正确的链表吗? 补充:在大多数书中都使用第二个例子,这是为什么?使用第一个示例有缺点吗?

最佳答案

是的。两者在技术上都是正确的。

在第一个例子中,内存在栈上,在第二个例子中在堆上。

当内存在堆栈上时,“编译器”负责释放内存(当变量超出范围时)。由于您的链接列表可以比您显式创建的变量更长寿,因此这可能会导致各种问题。例如,在第一个示例中,如果 b 超出范围,但 k 没有,那么 k 将有一个悬空指针,这会导致未定义的行为(也称为不良行为)。

当内存在堆上时,必须管理内存,如果您忘记释放内存,这可能会导致问题。考虑到异常(exception)情况,这比听起来更难。我建议你使用某种形式的 smart pointer .这是使用链表最常见和最安全的方式。

关于C++ 使用 . 和 . 之间有什么区别?或 -> 对于链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339296/

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