【发布时间】:2020-01-02 02:49:27
【问题描述】:
标题并没有真正做到这一点......
所以,如果我使用 new 创建一个类(在本例中为 Course,如高尔夫球场) - 所以它是在堆上创建的,并且 Course 包含另一个类的 Holes 向量,该向量是否必须是向量Hole* 让他们在堆上?
class course {
public:
course(std::string file);
private:
std::string name;
std::vector<hole> holes;
};
class hole {
public:
hole(std::string data);
private:
std::vector<vec3> vertices;
std::vector<int> triIndex;
std::vector<int> boundaryIndex;
};
course currentCourse = new course("datafile.dat");
我的假设是,当然,如果课程在堆上,那么所有成员当然也会在堆上,但我现在怀疑自己,是的,这是任务的一部分,我必须进行内存管理考虑到 - 我以前从未遇到过这种情况,我什至不确定如何测试变量是否在堆栈或堆内存中。
我真的希望我已经把这个问题说清楚了,因为我在措辞上遇到了困难,因此搜索并没有多大帮助:(如果人们能指出我的正确之处,我很乐意发布更新方向。
【问题讨论】:
-
这个“作业的一部分”具体说明或要求什么?
-
随附报告的内存管理部分要求“在本节中描述您在开发中如何管理内存,以应对可扩展性(例如100名球员,20门课程等)问题,并附有详细图表和/或代码示例(大约 0.5 页)”我知道应该在堆上创建动态或大型数据集,而较小的数据集可以留在堆栈上(实际上可能更快)。
-
我在这个“内存管理部分”中看不到任何似乎需要进入这些细节的地方。在我看来,声明“X 是通过使用向量来管理的”就足够了。
-
是的,你是对的。如果您使用
new分配内存,则该类的每个成员都将驻留在堆上。请注意,向量的直接内容将只是内存簿记(如其大小)。向量将为实际数据分配更多的堆内存,而不管向量是驻留在栈上还是堆上。 -
切向相关:更喜欢术语“动态内存”而不是“堆”。堆是一种几乎通用的动态内存实现,但如果能够满足要求,C++ 可以使用精灵尘土和仓鼠轮。同样喜欢“自动记忆”而不是“堆栈”。通常这无关紧要,但它可以,例如在考试中。
标签: c++ class oop memory-management