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

Kin*_*uoc -2 c++ pointers

在C++中,我有两个代码块,如下所示:

Base *base = new Base();
base->showName();
Run Code Online (Sandbox Code Playgroud)

和:

Base base;
base.showName();
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*igt 8

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

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

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

Base base;
base.showName();
Run Code Online (Sandbox Code Playgroud)

这更好,因为

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

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

unique_ptr<Base> base(new Base());
base->showName();
Run Code Online (Sandbox Code Playgroud)

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

  • 仅仅因为它编译,并不意味着它"好". (3认同)