C ++函数初始化和内存泄漏

时间:2015-07-01 15:47:31

标签: c++ memory-management memory-leaks

调用函数时,C ++函数中的所有变量都是预先初始化的,无论它们在何处被声明?我问这个,因为我想知道在执行整个函数之前是否退出函数会导致在return语句之后声明的变量的内存泄漏。例如:

string oddOrEven(int a)
{
 if ((a % 2) != 0)
 {
    string odd{ "the number is odd" };
    return odd;
 }
 else
 {
    string even{ "the number is even" };
    return even;
 }
}

这段代码仅用于演示目的。

如果它是一个交给函数的奇数,那么字符串偶数{}永远不会被创建吗?因为如果要创建它,那么这意味着当函数在if-else块的第一部分退出时,该字符串将成为内存泄漏?

4 个答案:

答案 0 :(得分:1)

字符串even是else块的本地字符,如果a为奇数,则不会创建。

注意:局部变量,即使是直接在函数内声明的变量,也不会自动初始化;只有在所有函数之外声明的全局变量才会自动初始化..

参考文献:

http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm

从下面的URL:“在条件(块)内声明的局部变量将在条件结束时超出范围。”

Scope of variables in if statements

答案 1 :(得分:0)

一旦你的程序离开函数oddOrEven(int a),该函数的所有局部变量都将被销毁并返回string

答案 2 :(得分:0)

如果是传递给函数的奇数,则永远不会创建字符串{}。

答案 3 :(得分:0)

其他答案试图解决的问题是,包括oddeven在内的所有局部变量在从创建它们的范围退出时都会被销毁。

odd(或even)不是函数返回的内容。返回的是oddeven的临时副本,并且调用者知道要删除此副本。

注意:这忽略了返回值优化(RVO),因为这只会使情况更加混乱。