C++ 中有一些更智能的智能指针吗?

Are there some smarter smart pointers in C++?

我经常使用旧代码,其中原始指针与智能指针混合在一起,我没有时间将所有原始指针更改为智能指针。

并且可能存在一些情况,例如指向对象的静态原始指针,该对象可能已经被破坏,起初似乎是使用 weak_ptr 来保存引用的情况,但问题出现了,因为带有原始指针的地方没有关于 shared_ptrs 已经指向同一个对象的任何信息。

所以:
1) 是否有任何更智能的智能指针可以跟踪指向对象的所有指针(原始指针和智能指针)?
2) 有没有更智能的智能指针,至少可以跟踪所有 shared_ptrs 到一个对象?

我不想讨论实现,如果可能的话我想将它用作黑盒。

编辑:我问了 2),因为例如在一个对象上调用 make_shared 两次,会产生 2 个单独的 shared_ptr 引用计数器。

1) Is there any smarter smart pointer that tracks all pointers (both raw and smart) to an object?

没有。没有这样的标准指针,而且这样的指针在标准 C++ 中是不可实现的。

2) Is there any smarter smart pointer that at least tracks all shared_ptrs to an object?

你的意思有点不清楚。所有权与共享指针的所有副本隐式共享。如果你的意思是你想通过单独的共享指针获得所有权来工作,那么 C++ 中没有这样的智能指针。也许可以使用全局数据结构来实现。

另一方面,std::enable_shared_from_this 可能 正是您要找的东西。如果您尝试单独获取共享所有权,它仍然不起作用,但它提供了一种方便的方式来加入现有所有权,而无需访问任何共享指针。

您可能希望使用不以任何形式或形式基于 C 的语言进行编程。

C有指针。智能指针不是真正的指针。

除非你发明了一种不同的语言,在任何层面上都与 C 不兼容,否则你将始终拥有指针,这些指针将不受任何所谓的 "smart pointer" 的控制,这既不聪明也不指针。