我有两个虚拟问题困扰了我一段时间,我在网上搜索并阅读了很多C++教程,但是我无法找到确切的答案。
假设我们有一个名为Node的类,它是单向链表的基本构建块。
class Node
{
int data;
Node* next;
}
事实1:局部变量(非静态)在对应函数退出时会被销毁。
问题1:那么以下情况呢:
Node* func()
{
Node n;
Node* ptr=&n;
return n;
}
节点n会被销毁吗?或者我们必须使用new运算符创建节点并返回指向堆内存的指针。如果两种方法都可以,哪种方法更好?
问题2:如何为节点类编写析构函数?(我在stackOverflow上找到了一些类似的问题,但这些答案侧重于链表的析构函数。我已经明白了那部分内容。我想要的正是一个Node类的析构函数)。
---------------------------------------编辑------------------------------------
感谢所有给我建议或指出我的错误的人。我认为我已经得到了答案。以下是我从你们的答案中摘录的笔记,真的解决了我的困惑。
- 不建议从函数返回栈内存地址,因为这会导致未定义行为。
- 返回堆内存是可以的,但我们必须注意对象的销毁。
- 另一种替代方法是返回一个对象,从复制构造函数中受益。
Node*
但你正在返回一个Node
,即n
。 - eerorika