ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 哪个共享指针应该是环或循环中的弱指针

2019-08-30 06:07:02  阅读:319  来源: 互联网

标签:weak-ptr c c11 pointers smart-pointers


如果我们有一个父类,它引用了一个子类(共享指针),而且子类也有一个对父类的引用(再次使用共享指针),我们必须使这两个智能指针中的一个成为弱指针.

但是我们如何决定这两个指针中的哪一个应该是弱指针呢?

此外,当弱指针指向0(当共享计数为0时),当我们可能仍需要访问它时,是否删除了对象?好吧,我知道至少我们知道对象不在那里,我们不应该尝试访问它,但这足够了吗?

解决方法:

If we have a Parent class that has a reference to a Child Class
(shared pointer) and the Child Class also has a reference to the
Parent Class (again with a shared pointer) we have to make one of
these two smart pointers a weak pointer.

不,您不必,如果您认为它适合您的设计,您可以.

But how we decide which of these two pointers should be a weak
pointer?

可以在不需要另一个的情况下生活和完成工作的对象应该存储弱指针

Also when a weak pointer points to 0 (when the shared count is 0), is
not a situation where an object deleted when we may still need access
to it? ok, i get that at least we know that the object is not there
and that we should not try to access it, but is this enough?

如果两个对象在它们自己活着时需要彼此存活,那么在每个对象中保持共享指针.当这些对象完成它们的工作时,你只需重置一个共享指针(通常是最高级别类中包含的那个),它将创建一个清理周期,如果它们没有在别处使用,那么所有实例都会被正确销毁.

P.S:我发现对这种情况非常有帮助的设计是添加启动/停止成员函数,特别是如果你使用的是在构造函数中无法调用的enable_shared_from_this,你可以获得有关此设计的更多细节from boost asio’s author.

标签:weak-ptr,c,c11,pointers,smart-pointers
来源: https://codeday.me/bug/20190830/1765987.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有