Class 存在和引用计数管理
Class existence and Reference count management
有人告诉我 class 并不真正存在(在内存中)。真正存在的是对象。 class 本身不占用内存。我记得是从 Herbert Schildt (2002) 的一本书中看到的。
现在,C++Primer(2013)告诉我,每个 shared_ptr 都带有一个计数器,用于控制有多少共享指针指向同一地址(引用计数),并且
"the class keeps track of how many share_ptrs point to the same object and automatically frees that object when appropriate".
所以,一本书讲述 "non-physical" 存在一个 class 而另一本书讲述它 "physically" 存在是因为它似乎带有一个变量或一些数据结构我假设存储计数,因此占用内存。
此外,我真的不明白那个计数器是否只有一个,每个指向该地址的 shared_ptr 都可以通过某种方式访问,或者多个计数器等于 shared_pointers 指着那里。最后一本书说
"we can think of a shared_ptr as if it has an associated counter".
我试图在不使用标准库的情况下创建自己的 shared_ptr,但我发现这比我预期的要难。现在我只是想了解幕后发生的事情。
"the class keeps track of how many share_ptrs point to the same object and automatically frees that object when appropriate"
这可能是校对时遗漏的内容。另一方面,从对象是数据,classes是行为的角度来看是准确的。对象占用内存并具有地址。 类 有逻辑和说明。跟踪某物和释放某物是行为,所以它们起源于class。 (跟踪会记录在对象中,但是决定存储什么的逻辑在class。这是一个很好的点。你不应该花太多时间在上面。)
Also, I don't really understand if that counter is only one, accessible in some way by every shared_ptr pointing to that address, or a number of counters equal to the number of shared_pointers pointing there.
只有一个计数器(替代方案会增加开销而没有任何好处)。这可以实现的一种方法是通过双重间接寻址。智能指针可以指向包含您感兴趣的计数器和指针的辅助对象。
智能指针 -> 控制块 -> 你的数据
有人告诉我 class 并不真正存在(在内存中)。真正存在的是对象。 class 本身不占用内存。我记得是从 Herbert Schildt (2002) 的一本书中看到的。
现在,C++Primer(2013)告诉我,每个 shared_ptr 都带有一个计数器,用于控制有多少共享指针指向同一地址(引用计数),并且
"the class keeps track of how many share_ptrs point to the same object and automatically frees that object when appropriate".
所以,一本书讲述 "non-physical" 存在一个 class 而另一本书讲述它 "physically" 存在是因为它似乎带有一个变量或一些数据结构我假设存储计数,因此占用内存。
此外,我真的不明白那个计数器是否只有一个,每个指向该地址的 shared_ptr 都可以通过某种方式访问,或者多个计数器等于 shared_pointers 指着那里。最后一本书说
"we can think of a shared_ptr as if it has an associated counter".
我试图在不使用标准库的情况下创建自己的 shared_ptr,但我发现这比我预期的要难。现在我只是想了解幕后发生的事情。
"the class keeps track of how many share_ptrs point to the same object and automatically frees that object when appropriate"
这可能是校对时遗漏的内容。另一方面,从对象是数据,classes是行为的角度来看是准确的。对象占用内存并具有地址。 类 有逻辑和说明。跟踪某物和释放某物是行为,所以它们起源于class。 (跟踪会记录在对象中,但是决定存储什么的逻辑在class。这是一个很好的点。你不应该花太多时间在上面。)
Also, I don't really understand if that counter is only one, accessible in some way by every shared_ptr pointing to that address, or a number of counters equal to the number of shared_pointers pointing there.
只有一个计数器(替代方案会增加开销而没有任何好处)。这可以实现的一种方法是通过双重间接寻址。智能指针可以指向包含您感兴趣的计数器和指针的辅助对象。
智能指针 -> 控制块 -> 你的数据