C ++中的智能指针,带有共享对象验证

时间:2011-10-14 08:43:16

标签: c++ smart-pointers

我需要智能指针类或模板,它可以在“删除”发生后使其引用对象无效。关键是使指针在多线程应用程序的调试中可用。

这是一个例子,只是伪代码:

void foo1(smart_ptr<myclass> ptr)
{
    //some code
    delete ptr;
    //some other code
}

void foo2(smart_ptr<myclass> ptr)
{
    //some code
    function_wich_uses_ptr(ptr);
    //some other code
}


int main()
{
    myclass val = new myclass();
    smart_ptr<myclass> ptr(&val);
    //somehow make a copy of ptr
    smart_ptr<myclass> ptr2(ptr);
    //some code
    thread_start(foo1, ptr);
    thread_start(foo2, ptr2);
    //
    return 0;
}

所以,我需要foo2以某种方式跟踪foo1是否已经删除了引用ptr的对象。 通常情况下 - 在任何“生活”智能指针到单个对象的任何人删除该对象后,所有其他指向同一对象的指针应该以某种方式'感觉'并将其自己的值设置为NULL。

UPD 我的不好,示例不正确

1 个答案:

答案 0 :(得分:3)

您正在寻找一个非拥有的智能指针。这正是boost::weak_ptr所做的。