在C++中使用或不使用指针时

when use pointer or not in C++?

本文关键字:指针 C++      更新时间:2023-10-16

在C++中,我有两个这样的代码块:

Base *base = new Base();
base->showName();

和:

Base base;
base.showName();

我不知道我们什么时候使用指针,什么时候不使用?有什么不同,什么更好?

您显示的第一个代码是内存泄漏。

第二个片段是Java,而不是C++。该问题已被编辑以使用我建议的代码。

一般来说,在C++你应该避免new,除非你真的需要动态寿命。 相反,请写:

Base base;
base.showName();

这更好,因为

  • 它更快,不需要堆分配。
  • 您不必记住释放内存,编译器会在作用域结束时自动执行此操作。
  • 它自动异常安全。 在堆栈展开期间,将调用析构函数并恢复内存。

如果对象需要超过作用域的末尾,则应使用:

unique_ptr<Base> base(new Base());
base->showName();

现在unique_ptr将在unique_ptr死亡时为您释放内存,而且它也是异常安全的。 当您返回unique_ptr时,所有权将转移给调用方,他可以获得自动清理的好处。