类存在和引用计数管理
Class existence and Reference count management
有人告诉我,一个类并不真正存在(在内存中(。真正存在的是对象。类本身不占用内存。我记得赫伯特·希尔特(Herbert Schildt,2002(的一本书。
现在,通过C++Primer (2013(告诉我,每个shared_ptr都有一个计数器,该计数器控制指向同一地址(引用计数(的共享指针的数量,并且
"该类跟踪有多少share_ptrs指向同一对象,并在适当的时候自动释放该对象"。
因此,一本书讲述了一个类的"非物理"存在,而另一本书讲述了它"物理"存在,因为它似乎携带了一个存储计数的变量或某种数据结构,因此占据了内存,我假设。
另外,我真的不明白该计数器是否只有一个,指向该地址的每个shared_ptr都可以以某种方式访问,或者与指向那里的shared_pointers数量相等的计数器数量。最后一本书说
"我们可以把一个shared_ptr想象成一个相关的计数器"。
我试图在不使用标准库的情况下创建自己的shared_ptr,我发现这比我预期的要难。现在我只是想了解幕后发生的事情。
"类会跟踪指向同一对象的share_ptrs数量,并在适当的时候自动释放该对象">
这可能是通过校对溜走的东西。另一方面,从对象是数据而类是行为的角度来看,它是准确的。对象占用内存并具有地址。类有逻辑和指令。跟踪某些内容并释放某些内容是行为,因此它们源自类。 (跟踪将记录在对象中,但决定存储内容的逻辑位于类中。这是一个很好的观点。你不应该花太多时间在上面。
另外,我真的不明白该计数器是否只有一个,指向该地址的每个shared_ptr都可以以某种方式访问,或者等于指向那里的shared_pointers数量的计数器。
将只有一个计数器(替代方案会增加开销而没有任何好处(。实现这一点的一种方法是通过双重间接。智能指针可以指向包含计数器和您感兴趣的指针的帮助程序对象。
智能指针 ->控制块 ->您的数据
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 当vector是tje全局变量时,c++中vector的内存管理
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 类存在和引用计数管理
- 如何管理 std::list 元素作为引用
- Swift 3 引用类型和内存管理
- 在更改文件描述符 1 以引用其他文件后,我应该如何管理 ::std::cout?
- C++ - 管理基于磁盘的矢量中的引用
- 正在将引用传递到一个可以用于内存管理的函数中
- 如何将管理器的引用传递给处理程序对象
- 单例或将指针传递给管理器中的静态引用
- 共享 PTR - C++ 如何使用引用计数管理对象缓存