C++函数初始化和内存泄漏
C++ function initialization and memory leaks
在调用C++函数时,是否预先初始化了函数中的所有变量,无论它们在哪里声明?我问这个问题是因为我想知道在整个函数执行之前退出一个函数是否会导致返回语句后声明的变量内存泄漏。例如:
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块的第一部分退出时,字符串将成为内存泄漏吗?
字符串even
是else块的本地字符串,如果a
是奇数,则不会创建该字符串。
注意:局部变量,即使是直接在函数内部声明的变量,也不会自动初始化;只有在所有函数外部声明的全局变量才会自动初始化。。
参考:
http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
从下面的URL:"在条件(块)中声明的局部变量将在条件结束时超出范围。"
if语句中变量的范围
一旦程序离开函数oddOrEven(int a)
,该函数的所有局部变量都将被销毁,并返回您的string
如果传递给函数的是奇数,则永远不会创建字符串even{}。
其他答案试图解决的问题是,包括odd
或even
在内的所有局部变量在退出创建它们的范围时都会被销毁。
odd
(或even
)不是函数返回的内容。返回的是odd
或even
的临时副本,调用者知道要删除此副本。
注意:这是忽略返回值优化(RVO),因为这只会使情况更加混乱。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏