小编use*_*047的帖子

C++:在函数内创建新对象并将其作为结果返回时,我是否必须使用new运算符来创建对象?

我有两个虚拟的问题让我困惑了一段时间.我确实在线搜索并阅读了很多c ++教程,但是我找不到具体的答案.

假设我们有一个名为Node的类,它是单链表的构建块.

class Node
{
   int data;
   Node* next;
}
Run Code Online (Sandbox Code Playgroud)

事实1:局部变量(非静态)将在相应函数退出时被销毁.

问题1:情况如何打击:

Node* func()
{ 
    Node n; 
    Node* ptr=&n; 
    return n;
}
Run Code Online (Sandbox Code Playgroud)

节点n会被破坏吗?或者我们必须使用new运算符来创建节点并返回指向堆内存的指针.如果两种方式都有效,哪种方法更好?

问题2:如何为节点类编写析构函数?(我在stackOverflow上找到了一些类似的问题,但那些答案集中在链表的析构函数上.我已经得到了那个部分.我想要的只是Node类的析构函数).

---------------------------------------感谢大家!我知道了 - - - - - - - - - - - - - - - - - -

感谢所有给我建议或指出我的错误的人.我想我得到了答案.以下是我从你的答案中得到的一个注释,这真的打败了我的困惑.

  1. 从函数返回堆栈内存地址不是一个好习惯,因为它会导致未定义的行为.
  2. 返回堆内存是可以的,但我们必须处理对象的破坏.
  3. 另一种方法是返回一个对象,受益于复制构造函数.

c++ constructor destructor

8
推荐指数
1
解决办法
1万
查看次数

C++中的变量和引用有什么区别?

我所知道的事实:

  1. C++中有三种类型的变量:变量,指针和引用.
  2. 变量是存储实际数据的存储器的标签.
  3. 指针存储变量的地址.
  4. 引用是变量的别名.

我的问题:

  1. 通过观察,变量名称和引用的使用是可交换的.真的吗?
  2. 传递变量名作为参数和传递引用有什么区别?例如,

    void func(int a); vs void func2(int&b);

太感谢了!

c++ variables reference

1
推荐指数
1
解决办法
3697
查看次数

标签 统计

c++ ×2

constructor ×1

destructor ×1

reference ×1

variables ×1