关于C++中的垃圾回收

About Garbage collection in C++

本文关键字:C++ 关于      更新时间:2023-10-16

我正在阅读有关垃圾回收器模式的文章。有人提到,这种体系结构模式通过有效地消除内存泄漏和悬空指针,消除了绝大多数与内存相关的问题。

我知道使用垃圾回收器可以消除内存泄漏,但垃圾回收器如何解决悬挂指针的问题?请给我一个例子,说明如何使用垃圾收集器来解决悬挂指针的问题,假设我使用标记和扫描算法来实现它。

谢谢!

悬挂指针的问题是间接处理的:在GC环境中,只有当没有指向对象的指针时,对象才会被删除,因此,在任何情况下都不会删除它,因为它会留下悬挂指针。也就是说,根本不会有悬空指针,问题也不会发生。

当您在它的寿命结束了。这种情况可能发生在返回函数或使用释放内存块后的地址。以下内容代码片段显示:

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();
}

在上面的例子中,当PrintVal()函数为调用的指针调用它SomeFunc中的析构函数。