use*_*700 9 c++ memory memory-leaks
如果不是这意味着我必须通过删除所有局部变量来结束每个函数,如果我想防止100%的内存泄漏?
Jos*_*eld 16
所有对象都有相关的存储持续时间.存储持续时间描述了对象的存储保持多长时间.非引用的局部变量引入具有自动存储持续时间的对象,这意味着这些对象的存储在其范围的末尾自动销毁.
引用类型变量不引入对象,甚至可能不需要存储它们自己,但它们仍然具有存储持续时间(§3.7/ 3).如果引用确实需要存储,则将根据引用的存储持续时间释放它.
因此,任何类型的局部变量声明都不会泄漏.实际上,您不能delete拥有具有自动存储持续时间的对象.这仅用于具有动态存储持续时间的对象,这些对象是使用分配的new.
如果您手动分配内存,则必须在需要时将其删除,
例:
char* foo()
{
char* manually_allocated_char = new char(); // this will 'live' outside the function
char autamically_allocated = 'a'; // this will be 'deleted'
return manually_allocated_char;
}
void main()
{
char* a_new_char = foo();
delete a_new_char; // You must free memory you have allocated for not having memory leaks
}
Run Code Online (Sandbox Code Playgroud)