Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在这种情况下,如何有效地使用侵入式ptr?_C++_Memory Management_Boost_Smart Pointers - Fatal编程技术网

C++ 在这种情况下,如何有效地使用侵入式ptr?

C++ 在这种情况下,如何有效地使用侵入式ptr?,c++,memory-management,boost,smart-pointers,C++,Memory Management,Boost,Smart Pointers,我读了很多关于smart ptr的文章,并决定在我自己的实现中使用侵入式ptr进行引用计数 说到这里,我现在不得不面对另一个问题,如何在考虑弱ptr的情况下解决引用循环,而不能与auto_ptr类一起使用 使用应该存储弱引用的原始指针来解析循环是件好事吗?这样做的连续性是,如果删除强引用,弱引用将不会被通知/归零,但我认为正确地选择依赖项可能是一个好的选择,但我可能在这里错了 有人能对此发表意见吗?只需使用共享\u ptr。它更易于使用,并且与您提到的弱\u ptr配合使用。也许有一天你会发现你

我读了很多关于smart ptr的文章,并决定在我自己的实现中使用侵入式ptr进行引用计数

说到这里,我现在不得不面对另一个问题,如何在考虑弱ptr的情况下解决引用循环,而不能与auto_ptr类一起使用

使用应该存储弱引用的原始指针来解析循环是件好事吗?这样做的连续性是,如果删除强引用,弱引用将不会被通知/归零,但我认为正确地选择依赖项可能是一个好的选择,但我可能在这里错了


有人能对此发表意见吗?

只需使用
共享\u ptr
。它更易于使用,并且与您提到的
弱\u ptr
配合使用。也许有一天你会发现你想使用侵入式语言,但在此之前,请保持简单。

你的问题很模糊。在您的特定场景中,您真的需要
弱\u ptr
提供的功能,还是哑指针就足够了?(也就是说,你是否需要测试非拥有指针是否有效的能力?)如果你回答了这个问题,那么你就得到了你所问问题的答案。“arquitecting”是什么意思?@Daniel谢谢。在西班牙语和葡萄牙语中,这似乎就是“architect”的拼写方式。为什么要使用侵入式的_ptr,为什么引用图中有循环?@JamesMcNellis:我正在寻找一种减少内存泄漏的方法,但使用一个没有堆分配的智能指针。在回答weap_ptr问题时,我认为无法知道主/强指针的引用何时无效是危险的,因为主指针已被删除。我知道,如果小心的话,这可以最小化,但我想使用一种更具权威性的方法,这就是为什么我一直在研究智能ptr。乍一看,我使用了共享ptr,但对我来说,它似乎有点黑客。您必须将类从enable_shared_从_this中删除。如果您想通过此命令,可以很容易地创建双删除指针,很难知道何时将创建新的引用计数器,等等。。。我并不是说共享\u ptr不是一个好的选择,但我发现很难完全掌握它,因此,我更喜欢使用更简单的解决方案,如侵入式\u ptr。也许这不是一个好决定。我想,另一边的草总是更绿的。从我所坐的位置来看,侵入式的_ptr远不如共享式_ptr那么容易使用。顺便说一句,如果使用boost::make_shared(),您可以只获得一个堆分配,而不是使用shared_ptr获得两个堆分配。在放弃共享资源之前,您可能也想看看池。您可以在此处看到一些人如何使用该组合: