【发布时间】:2014-12-05 08:02:57
【问题描述】:
我有两个愚蠢的问题让我困惑了一段时间。我确实在网上做了一些搜索并阅读了很多 c++ 教程,但是我找不到具体的答案。
假设我们有一个名为 Node 的类,它是单链表的构建块。
class Node
{
int data;
Node* next;
}
事实1:局部变量(非静态)将在相应函数退出时被销毁。
问题1:情况如何:
Node* func()
{
Node n;
Node* ptr=&n;
return n;
}
节点n会被销毁吗?或者我们必须使用 new 运算符来创建节点并返回指向堆内存的指针。如果两种方法都有效,那么哪种方法更好?
问题2:如何为节点类写析构函数? (我在 stackOverflow 上发现了一些类似的问题,但这些答案集中在链表的析构函数上。我已经得到了那部分。我想要的正是 Node 类的析构函数)。
---------------------------------------编辑-------- -----------------------------
感谢所有给我建议或指出我错误的人。我想我得到了答案。下面是我从你的回答中做的一个笔记,它确实消除了我的困惑。
- 从函数返回堆栈内存地址不是一个好习惯,因为它会导致未定义的行为。
- 返回堆内存是可以的,但我们必须注意对象的销毁。
- 另一种方法是返回一个对象,受益于复制构造函数。
【问题讨论】:
-
问题 1 中的代码还能编译吗?
-
@KerrekSB,感谢您的快速回复。我正在审查 c++ 编程,这个问题刚刚出现在我的脑海中,我只是在运行中输入了代码。我只是测试了它,它实际上不会编译。代码的编译版本正在更新。还是同样的问题。
-
@user3367047 它仍然无法编译。该函数的返回类型是
Node*,但您返回的是n,它是Node
标签: c++ constructor destructor