类存在和引用计数管理

Class existence and Reference count management

本文关键字:管理 引用 存在      更新时间:2023-10-16

有人告诉我,一个类并不真正存在(在内存中(。真正存在的是对象。类本身不占用内存。我记得赫伯特·希尔特(Herbert Schildt,2002(的一本书。

现在,通过C++Primer (2013(告诉我,每个shared_ptr都有一个计数器,该计数器控制指向同一地址(引用计数(的共享指针的数量,并且

"该类跟踪有多少share_ptrs指向同一对象,并在适当的时候自动释放该对象"。

因此,一本书讲述了一个类的"非物理"存在,而另一本书讲述了它"物理"存在,因为它似乎携带了一个存储计数的变量或某种数据结构,因此占据了内存,我假设。

另外,我真的不明白该计数器是否只有一个,指向该地址的每个shared_ptr都可以以某种方式访问,或者与指向那里的shared_pointers数量相等的计数器数量。最后一本书说

"我们可以把一个shared_ptr想象成一个相关的计数器"。

我试图在不使用标准库的情况下创建自己的shared_ptr,我发现这比我预期的要难。现在我只是想了解幕后发生的事情。

"类会跟踪指向同一对象的share_ptrs数量,并在适当的时候自动释放该对象">

这可能是通过校对溜走的东西。另一方面,从对象是数据而类是行为的角度来看,它是准确的。对象占用内存并具有地址。类有逻辑和指令。跟踪某些内容并释放某些内容是行为,因此它们源自类。 (跟踪将记录在对象中,但决定存储内容的逻辑位于类中。这是一个很好的观点。你不应该花太多时间在上面。

另外,我真的不明白该计数器是否只有一个,指向该地址的每个shared_ptr都可以以某种方式访问,或者等于指向那里的shared_pointers数量的计数器。

将只有一个计数器(替代方案会增加开销而没有任何好处(。实现这一点的一种方法是通过双重间接。智能指针可以指向包含计数器和您感兴趣的指针的帮助程序对象。

智能指针 ->控制块 ->您的数据