我非常好奇从方法返回引用是否会导致内存泄漏。以下是示例情况。
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_val
和 test_vect
在 test_run
退出时从堆栈中移除。 test_vect
或 test_val
是否被删除从而导致对象 1 损坏?
最佳答案
没有。引用是其他事物的别名(或名称)。您可以将其视为一个永不拥有的指针,指向没有指针语义的东西(以及它们的陷阱,尽管引用本身有一些曲折)。
当函数 test_run
退出时,引用消失了,只有它们消失了。他们提到的内容在内存方面没有被触及,也没有被删除。
此外,由于您只处理具有自动存储持续时间且在构造期间不涉及动态内存的变量,因此您根本不会在那里发生内存泄漏。您可能会遇到其他问题,例如尝试删除指向此类变量的指针(尝试只产生 core dump on coliru )但不会泄漏。
关于c++ - 返回 const 引用或引用的方法会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810664/