【发布时间】:2012-01-23 18:02:09
【问题描述】:
我目前正在尝试编写正确的 C++ 代码(运行它对于一些小型原型来说是可以的,但它很难看)。
我最近意识到堆和堆栈实例化的区别(O m = new O() vs. O m())。
现在我有一个类,其中头文件定义了一个变量,该变量包含一个表定义。
ChunkLoader.hpp:
TablePartion *tablePartial_;
ChunkLoader.cpp:
ChunkLoader() { tablePartial_ = new TablePartial(true, 0, 1); }
现在我想在堆栈上实例化 tablePartial,但我不能使用:
TablePartial tablePartial_(true, 0, 1);
我完全失明了?如何在堆栈上分配 tablePartial_?
或者我完全错了,我不能在构造函数中使用,因为它会在构造函数之后超出范围并因此被释放?但由于我读到堆栈变量在性能方面更好,所以我想使用堆栈实例化(并且得到delete 的红色)。
主要原因:堆栈溢出告诉我尽可能摆脱指针。 :)
【问题讨论】:
-
你能澄清一下你在堆栈上的意思吗?你的意思是一个局部变量,还是你在谈论将构造函数初始化器传递给父类?我有点困惑。
-
tablePartial_是ChunkLoader类的成员,还是函数中的简单变量,还是全局变量? -
注意,
O m();与变量无关;这是一个函数声明。 -
编辑了我的帖子以澄清。现在,
tablePartial_是一个指向 TablePointer 实例的指针。我想要实现的是,ChunkLoader 在堆栈上持续存在tablePartial_。 @MooingDuck 是的,tablePartial_ 是 ChunkLoader 的私有成员。 @FredOverflow 我的意思是实例化一个 O 类并调用变量 m (假设构造函数接受一个布尔值,所以它将是O m(true)例如)。 -
@Bouncner:哦,如果
tablePartial_是一个指针,它完全 会改变一切,并使所有现有答案无效。短篇小说要么使TablePartion成为成员本身(无指针),要么将其保留在堆上。成员指针几乎不应该指向堆栈上的某个东西。
标签: c++ heap-memory instantiation stack-memory