C++ 中的智能指针使用共享对象验证
我需要智能指针类或模板,它可以在“删除”发生后使其引用对象无效。关键点是使指针可用于多线程应用程序的调试。
这是一个例子,只是伪代码:
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 我的错,示例不正确
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您正在寻找一个非拥有的智能指针。这正是
boost::weak_ptr
确实如此。You are looking for a non-owning smart-pointer. This is exactly what
boost::weak_ptr
does.