使任何类引用都与继承一起计数吗?
在我的新项目中,我希望(主要是为了看看它会如何运作)完全禁止我的代码中的原始指针。
我的第一个方法是让所有类继承这个简单的类: 模板 类基类 { 民众: 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能需要查看enable_shared_from_this。
另一方面,当使用
shared_ptr
时,您需要注意循环引用的可能性。为了避免这种情况,您可以使用weak_ptr
。这意味着您需要某种方法来区分它们两者,因此仅使用 typedefclass::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 useweak_ptr
. This means you will need some way to distinguish between the two of them, so simply having a typedefclass::ptr
may not suffice.