使任何类引用都与继承一起计数吗?

发布于 2024-09-07 23:50:21 字数 415 浏览 3 评论 0原文

在我的新项目中,我希望(主要是为了看看它会如何运作)完全禁止我的代码中的原始指针。

我的第一个方法是让所有类继承这个简单的类: 模板 类基类 { 民众: typedef std::shared_ptr ptr; };

只要我需要指针,就可以简单地使用 class::ptr 。

这种方法似乎很合适,直到我意识到有时我的对象希望将“this”指针传递给其他对象。让我的对象将其包装在shared_ptr 中是行不通的,因为同一个指针可能有两个所有者。我认为这很糟糕。

我的下一个想法是更改“Base”类以实现引用计数本身,因此从“Base”继承的类的每个实例只能有一个计数。

这是一个好的解决方案吗,有没有更好的解决方案并且可以 boost 和/或 stl 已经为我解决这个问题?

In my new project I wish to (mostly for to see how it will work out) completely ban raw pointers from my code.

My first approach was to let all classes inherit from this simple class:
template
class Base
{
public:
typedef std::shared_ptr ptr;
};

And simple use class::ptr wherever I need a pointer.

This approach seemed suitable until I realized sometimes my objects wish to pass the 'this' pointer to other objects. Letting my objects just wrap it inside a shared_ptr won't do since then there could be two owners for the same pointer. I assume this is bad.

My next idea was to change the 'Base' class to implement reference counting itself, thus every instance of classes that inherits from 'Base' can only have one count.

Is this a good solution, are there any better and can boost and/or stl already solve this problem for me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

半夏半凉 2024-09-14 23:50:21

您可能需要查看enable_shared_from_this

另一方面,当使用shared_ptr时,您需要注意循环引用的可能性。为了避免这种情况,您可以使用 weak_ptr。这意味着您需要某种方法来区分它们两者,因此仅使用 typedef class::ptr 可能还不够。

You may want to take a look at enable_shared_from_this.

On another note, when using shared_ptr, you need to be aware of the possibility of circular references. To avoid this, you can use weak_ptr. This means you will need some way to distinguish between the two of them, so simply having a typedef class::ptr may not suffice.

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