C++ 中的智能指针使用共享对象验证

发布于 2024-12-09 13:21:50 字数 752 浏览 0 评论 0原文

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

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

平安喜乐 2024-12-16 13:21:50

您正在寻找一个非拥有的智能指针。这正是 boost::weak_ptr 确实如此。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文