关于在堆上分配对象和在栈上分配对象,以及何时以何种方式调用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();
items指针存储在堆栈中还是堆中?如何删除它?
感谢您,对于这个长问题很抱歉。我已经有一段时间遇到这些问题了,在网上也没有找到完整的解释。