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

C++ function initialization and 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;
 }
}

这段代码只是为了演示目的。

如果传递给函数的是奇数,是否永远不会创建字符串 even{}?因为如果创建了,那岂不是在if-else块的第一部分退出函数时,该字符串就会成为内存泄漏?

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

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

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

参考文献:

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

来自下面的URL:"A local variable declared inside a conditional (block) will go out of scope at the end of the conditional."

Scope of variables in if statements

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

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

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

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