Maxim Efimov
Maxim Efimov

Reputation: 2737

Smart pointers in C++ with shared object-validation

I need smart pointer class or template, which can invalidate it's referencing object after 'delete' happens. Key point is to make pointer usable in debug for multy-thread apps.

Here is an example, just pseudocode:

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

So, I need foo2 somehow to track if foo1 has already deleted object referenced to ptr. In general - after anyone of 'living' smart pointers to a single obect deletes that object, all the other pointers to the same object should somehow 'feel' it and set it's own value to NULL.

UPD my bad, example was incorrect

Upvotes: 2

Views: 364

Answers (1)

Bj&#246;rn Pollex
Bj&#246;rn Pollex

Reputation: 76788

You are looking for a non-owning smart-pointer. This is exactly what boost::weak_ptr does.

Upvotes: 3

Related Questions