如果我在循环中有下面几行:C++指针简单的问题
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
什么是什么顾虑内存,如果我没有删除里面的运营商的行为它?它会不断地在不同的内存位置分配对象和数组,从而导致内存泄漏?
如果我在循环中有下面几行:C++指针简单的问题
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
什么是什么顾虑内存,如果我没有删除里面的运营商的行为它?它会不断地在不同的内存位置分配对象和数组,从而导致内存泄漏?
是的。这:
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)
字节的内存。
它会不断地在不同的内存位置分配对象和数组,因此内存泄漏?
假设你的意思是这样的:
for (;x;x)
{
double *ptr = new double[42];
}
那么答案是肯定的,内存泄漏。
是的。你会在循环的每一次迭代中泄漏内存。 boost::scoped_ptr
和boost::scoped_array
是为了处理这种情况。
只是一个小细节,但不应该有一些恒定的空间开销的阵列分配,如'10 * anySize * sizeof(double)+ c'? – 2010-04-30 15:12:56
为了存储数组的大小信息,并不要求实现过度分配。例如,数组大小数据可能存储在某个表中,无论分配是否发生,都会存在。所以虽然你说得对,也会有一些开销也被泄露,但是不可能量化多少(甚至像'+ c'这样的普遍性,因为这意味着开销通过分配增加'O(n)' ,这不一定是真实的)以适用于所有实现的方式。 – 2010-04-30 16:53:51