【发布时间】:2011-10-06 12:25:57
【问题描述】:
我对在堆上分配对象与在堆栈上分配以及何时以及如何调用 delete() 的主题有点困惑。
例如,我有类 Vector。我想做一个数组。
我可以这样做
Vector** v = new Vector*[100]; //create an array of 100 pointers to 100 Vector objects
据我了解,这会将所有内容(除了指针地址)分配在堆上吗? 所以要释放内存,我需要:
for (int i = 0; i < 100; ++i)
{
delete(v[i]);
}
delete(v);
或者只是
delete(v);
够了吗?
现在再举一个例子:
Vector* v = Vector[100];
在这种情况下发生了什么?分配发生在哪里?堆还是栈? 我还需要打电话吗
delete(v);
但这还不是全部问题,抱歉发了这么长的帖子..
示例:
class Vector
{
int x, y, z;
}
Vector* v = new Vector();
x、y、z 分配在哪里?堆还是栈?
或者这个怎么样:
class Vector2
{
int items[10];
}
Vector2* v2 = new Vector2();
items[10] 分配在哪里? 如何删除 v2?我需要自定义析构函数吗?
最后但并非最不重要的是这个怎么样:
class Vector3
{
int* items;
}
Vector3 v3 = Vector3();
项目指针存储在哪里?堆还是栈?如何删除?
感谢和抱歉很长的问题。这东西困扰了很久,网上也找不到完整的解释。
【问题讨论】:
-
忘记新/删除你不需要它们。只需使用 std::vector
-
对不起老兄,这只是我为了理解内存分配而提供的一个示例类。这与实际应用没有任何关系。我不妨称它为 MyClass。 + 即使它是 std::Vector 也是别的东西,不要混淆名称!
-
跟名字无关。更多的是使用
new X[]。在大多数情况下,您应该使用std::vector<X>
标签: c++