在 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();
Nowunique_ptr
将在unique_ptr
死亡时为您释放内存,并且它也是异常安全的。当您返回 aunique_ptr
时,所有权将转移给调用者,他可以获得自动清理的好处。