我正在了解垃圾回收器模式。据提到,这种架构模式通过有效地消除内存泄漏和悬空指针来消除绝大部分与内存相关的问题。
我知道使用垃圾回收器可以消除内存泄漏,但是垃圾回收器如何解决悬空指针的问题呢?请给我一个例子,说明如何使用标记清除算法实现垃圾回收器来解决悬空指针的问题。
谢谢!
我正在了解垃圾回收器模式。据提到,这种架构模式通过有效地消除内存泄漏和悬空指针来消除绝大部分与内存相关的问题。
我知道使用垃圾回收器可以消除内存泄漏,但是垃圾回收器如何解决悬空指针的问题呢?请给我一个例子,说明如何使用标记清除算法实现垃圾回收器来解决悬空指针的问题。
谢谢!
当您在对象的生命周期结束后使用其地址时,会出现悬空指针。这可能发生在从函数返回自动变量的地址或在释放内存块后使用内存块的地址等情况下。以下代码片段显示了这种情况:
class Sample
{
public:
int *ptr;
Sample(int i)
{
ptr = new int(i);
}
~Sample()
{
delete ptr;
}
void PrintVal()
{
cout << "The value is " << *ptr;
}
};
void SomeFunc(Sample x)
{
cout << "Say i am in someFunc " << endl;
}
int main()
{
Sample s1 = 10;
SomeFunc(s1);
s1.PrintVal();
}