gpt4 book ai didi

c++ - 删除引用

转载 作者:IT老高 更新时间:2023-10-28 21:43:40 33 4
gpt4 key购买 nike

这有效吗?可接受的做法?

typedef vector<int> intArray;

intArray& createArray()
{
intArray *arr = new intArray(10000, 0);

return(*arr);
}


int main(int argc, char *argv[])
{

intArray& array = createArray();

//..........

delete &array;

return 0;
}

最佳答案

代码的行为将是您的预期行为。现在,问题是,虽然您可能认为编程是为编译器编写一些东西来处理,但它同样是关于编写其他程序员(或将来的您)能够理解并能够维护的东西。您提供的代码在很多情况下相当于使用了编译器的指针,但对于其他程序员来说,它只是一个潜在的错误来源。

引用旨在成为在其他地方管理的对象的别名,以其他方式管理。通常人们在遇到 delete &ref 时会感到惊讶,而且在大多数情况下,程序员不会期望必须对引用的地址执行 delete,所以很有可能将来有人会调用该函数而忘记删除,您将遇到内存泄漏。

在大多数情况下,使用智能指针可以更好地管理内存(如果您不能使用其他高级构造,例如 std::vectors)。通过将指针隐藏在引用后面,您会更难在返回的引用上使用智能指针,因此您无济于事,反而使用户更难使用您的界面。

最后,关于引用的好处是,当您在代码中阅读它们时,您知道对象的生命周期在其他地方进行管理,您无需担心。通过使用引用而不是指针,您基本上回到了单一解决方案(以前在 C 中只有指针)并且突然必须格外小心所有引用以确定是否必须在那里管理内存。这意味着更多的努力,更多的时间来考虑内存管理,更少的时间去担心正在解决的实际问题——由于异常代码的额外压力,人们习惯于用指针寻找内存泄漏,并期望没有引用.

简而言之:通过引用保存内存对用户隐藏了处理内存的要求,并使其更难正确处理。

关于c++ - 删除引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233987/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com