如果我在循环中有以下行:
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
如果我内部没有删除操作符,那么内存关注的行为是什么?它会不断地在不同的内存位置上分配对象和数组,从而导致内存泄漏吗?
答案 0 :(得分:12)
是的,它会。这样:
for (int i = 0; i < 10; ++i)
{
Type* unite = new Type(newSize);
}
将分配10个Type
类型的对象,所有这些对象都位于不同的位置。它们都不会被释放,最后你将不会指向任何一个。您将泄漏10 * sizeof(Type)
个字节的内存。
同样,这个
for (int i = 0; i < 10; ++i)
{
double *array= new double[anySize];
}
出于同样的原因,会泄漏10 * anySize * sizeof(double)
字节的内存。
答案 1 :(得分:1)
会不断在不同的内存位置分配对象和数组,从而导致内存泄漏?
假设你是这个意思:
for (;x;x)
{
double *ptr = new double[42];
}
然后答案是肯定的,记忆被泄露了。
答案 2 :(得分:1)
是。您将在循环的每次迭代中泄漏内存。 boost::scoped_ptr
和boost::scoped_array
用于处理此类情况。