什么时候在C ++中使用指针?

时间:2012-06-09 15:31:01

标签: c++ pointers

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

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

Base base;
base.showName();

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

1 个答案:

答案 0 :(得分:8)

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

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

一般来说,在C ++中你应该避免使用new,除非你真的需要动态生命周期。相反,写一下:

Base base;
base.showName();

这更好,因为

  • 速度更快,无需分配堆。
  • 您不必记住释放内存,编译器会在范围的末尾自动执行此操作。
  • 它自动异常安全。在堆栈展开期间,将调用析构函数并恢复内存。

如果对象需要超出范围的末尾,您应该使用:

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

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