我该如何选择在C++中存储对象的位置?

3 c++ java

可能重复
在C++中正确的堆栈和堆使用?

我开始从Java背景学习C++,一个很大的区别是我不再被迫:

  1. 动态分配对象的内存
  2. 总是使用指针来处理对象

就像Java中的情况一样.但我很困惑何时应该做什么 - 你能建议吗?

目前我很想开始做Java风格的一切

Thing *thing = new Thing();
thing->whatever();
// etc etc
Run Code Online (Sandbox Code Playgroud)

sha*_*oth 5

除非你知道为什么需要它们,否则不要使用指针.如果您只需要一段时间的对象,请在堆栈上分配它:

Object object;
object.Method();
Run Code Online (Sandbox Code Playgroud)

如果需要将对象传递给函数,请使用引用:

int doStuff( Object& object )
{
    object.Method();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果需要,只使用指针

  • 图形复杂的数据结构或
  • 不同对象类型的数组或
  • 从函数或函数返回新创建的对象
  • 在有时需要指定"没有对象"的情况下 - 然后使用空指针.

如果使用指针,则需要在不再需要这些对象时以及在对象的最后一个指针变为不可缓存之前解除分配对象,因为C++没有内置垃圾回收.为简化此操作,使用智能指针行std :: auto_ptr或boost :: shared_ptr.

  • 还要记住像string和vector这样的类型主要是基于堆的,但是隐藏了你的所有细节.它应该在C++中的方式 (2认同)