我试图了解shared_ptr
计数器的工作方式。在我的类A
中,当我使用吸气剂时,计数器增加1。当在类A
中使用B
的实例时,计数器增加2。当我完成类{{ 1}}的{{1}}的析构函数被调用了两次。
我不明白的是,让我感到困惑的是:
为什么我们调用吸气剂B
时A
的计数器增加1。是因为我们通过Copy返回了一个指针,所以现在我们有2个指针了吗?
为什么调用A
的析构函数时计数器为3?
在a.a()
类中,为什么计数器增加2?
完成A
类的学习后,如何调用B
的析构函数?
当我在两个析构函数中都使用B
时,会变得很奇怪。
A
构造函数
A的计数器是1
A的计数器是2
B构造函数
析构后,As 3的数量
A的计数器是3
B的计数器是2
析构函数后,Bs 1的数量
析构后,As 2的数量
析构后,为As 1
构造函数
A的计数器是1
A的计数器是2
B构造函数
析构后,As为0
A的计数器是3
B的计数器是2
析构后,As为0
析构后,B的数目为0
析构后,为As 0
答案 0 :(得分:1)
a.a()
时,它都会返回一个指向资源的新共享指针。第一个是成员变量。它们最终被释放,但是没有隔离区,因为您不将返回的共享指针存储到变量中(该变量将其绑定到作用域)。After destructor, ...
是因为将A a
的值复制到B的构造函数中。如果希望避免复制,请使用引用B(A& a)
。A a
,返回但未发布的a.a()
结果以及将A a
的副本传递给{{1}的构造函数}。B
->递增计数器中返回新的共享指针。我希望这能涵盖您的所有问题,如果您有任何问题,我可以尝试进一步澄清。