返回常量引用或引用的方法是否会导致内存泄漏
Can methods that return const reference or references cause memory leaks?
我非常好奇从方法返回引用是否会导致内存泄漏。以下是示例情况。
class example
{
public:
vector<int> & get_vect()
{
return vect;
}
int & get_num()
{
return num;
}
private:
vector<int> vect;
int num;
};
void test_run(example & input)
{
int & test_val = input.get_num();
vector<int> & test_vect = input.get_vect();
}
int main()
{
example one;
test_run(one);
return 0;
}
我的问题是当test_run
退出时,test_val
和test_vect
何时从堆栈中移除。test_vect
或test_val
是否被删除,从而导致对象1损坏?
否。引用是其他事物的别名(或名称)。您可以将其视为一个从不拥有指针,指向没有指针语义的东西(以及它们的陷阱,尽管引用本身也有一些曲折)。
当函数test_run
退出时,引用(并且只有它们)将消失。他们提到的内容在记忆方面没有被触及,也没有被删除。
此外,由于您只处理具有自动存储持续时间的变量,并且在构建过程中不涉及动态内存,因此不可能出现内存泄漏。您可能会遇到其他问题,比如试图删除指向此类变量的指针(尝试只在coliru上产生核心转储),但不会泄漏。
否如果不使用new
分配内存,也就是说在堆上,为什么会导致内存泄漏?所有变量都分配在堆栈上。引用只是其他变量的别名。
根据wikipedia
:的C++参考定义
C++中引用的定义是这样的:存在它可以实现为现有对象的新名称。
还有一段谈到了指针和引用之间的区别。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 多个"常量引用"变量可以共享同一个内存吗?
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 常量引用的内存位置
- 引用释放的内存是未定义的行为吗?
- 为什么"std::uninitialized_copy"通常取消对未初始化内存的迭代器的引用不是未定
- 垃圾回收正在移动内存中被引用的对象,破坏Unreal4引擎中的引用
- X 处的指令引用了 Y 处的内存.内存无法读取
- 按引用传递和动态内存分配之间的区别是什么
- 如果引用应该保留,不删除析构函数中的指针会导致内存泄漏吗?
- 内存引用发送到双指针
- 可变引用以及指针如何与内存相互作用
- 通过引用 cpp 中的变量占用的内存
- C++中引用变量的内存?
- 来自引用指针的内存泄漏
- 在闭包中,如何通过存储在内存中的指针或引用类型捕获可变性或用现代函数式语言进行处理?
- Swift 3 引用类型和内存管理
- 数组是通过引用传递的,但是如果我只传递未存储在内存中的数组的值,会发生什么
- cpp 中的引用如何具有相同的内存地址
- 在递归循环中条件修改的引用内存