通知引用对象在C ++中删除引用的对象

时间:2015-09-23 07:52:28

标签: c++

我想问以下问题:

假设我们在C ++中有三个类:A,B和C.类A的对象是创建和拥有类B的对象。然后将B的引用提供给要存储的类C的对象作为指针变量。那么,如果A被删除,告诉C的最佳做法是什么,指向B的指针不再有效(并且应该设置为null)?

是否有一般方法或例如特定于Qt的方法?

1 个答案:

答案 0 :(得分:3)

使用std::weak_ptr

示例(live demo here

class A
{
private:
    std::shared_ptr<B> myB;

public:
    A() :
      myB(std::make_shared<B>())
    {
    }

    std::weak_ptr<B> GetB()
    {
        return myB;
    }
};

class B
{
};

class C
{
private:
    std::weak_ptr<B> theB;

public:
    C(std::weak_ptr<B> b) :
      theB(b)
    {
    }

    void test()
    {
        auto b = theB.lock();
        if (b)
        {
            // theB is still valid
        }
        else
        {
            // theB is gone
        }
    }
};