【发布时间】:2010-11-24 19:49:27
【问题描述】:
以下代码产生悬空引用:
int main()
{
int *myArray = new int[2]{ 100, 200 };
int &ref = myArray[0];
delete[] myArray;
cout << ref; // Use of dangling reference.
}
我知道我不应该删除数组,但在大型程序中,如果有人删除了我引用的内存怎么办?能保证没有人删除数组吗?
对抗悬空引用和悬空指针的最佳策略是什么?
【问题讨论】:
-
stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c。或者在这个例子中,最好的选择是不这样做。
-
动态分配数组的最佳替代方案是
std::vector。在 C++ 中几乎不需要使用new[]和delete[]。 - 但即便如此,迭代器和引用确实很容易失效。一般来说,你不应该长期引用那些可能不会有很长生命周期的东西。 -
谢谢本斯。 “不应该长期引用那些可能不会有很长寿命的东西。”我会听从这个建议