Reputation: 2737
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
Reputation: 76788
You are looking for a non-owning smart-pointer. This is exactly what boost::weak_ptr
does.
Upvotes: 3