我了解大多数 std 库实现选择std::enable_shared_from_this
通过将 a 存储std::weak_ptr
在基类中来实现。这导致以下情况:
#include <memory>
class Foo : public std::enable_shared_from_this<Foo>
{
public:
std::shared_ptr<Foo> GetSharedBar() const
{
// returns shared_ptr<const Foo> instead of std::shared_ptr<Foo>
return shared_from_this();
// Error in VC++2019 due to mismatch.
}
};
我似乎很清楚,尽管需要更新引用计数,shared_from_this()
但实际上并没有改变目标对象。这似乎是可变对象的理想用途,因此shared_from_this()
可以将其标记为const
相对于派生对象。
为什么不使用 实现mutable
?
为了阐明下面的答案:它是用std::weak_ptr
标记的 实现的mutable
,但这只允许std::weak_ptr
被突变,而不是让我们将非const
传递给其他人。