gpt4 book ai didi

c++ - 类存在和引用计数管理

转载 作者:行者123 更新时间:2023-11-30 05:00:03 25 4
gpt4 key购买 nike

有人告诉我一个类并不真正存在(在内存中)。真正存在的是对象。类本身不占用内存。我记得是从 Herbert Schildt(2002 年)的一本书中看到的。

C++Primer(2013)告诉我,每个 shared_ptr 都带有一个计数器,控制有多少共享指针指向同一地址(引用计数),

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

所以,一本书讲的是一个类的“非物理”存在,另一本书说它“物理”存在,因为它似乎带有一个变量或一些存储计数的数据结构,因此占用内存,我假设。

此外,我不太明白该计数器是否只有一个,可以通过指向该地址的每个 shared_ptr 以某种方式访问​​,或者是否有多个计数器等于指向该地址的 shared_pointers 的数量。最后一本书说

“我们可以将 shared_ptr 视为具有关联的计数器”。

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

最佳答案

"the class keeps track of how many share_ptrs point to the same object and automatically frees that object when appropriate"

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

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.

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

智能指针 -> 控制 block -> 你的数据

关于c++ - 类存在和引用计数管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com