“`” 当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。例如:
<img src=""https://uploadfiles.nowcoder.com/images/20190313/311436_1552458001111_37032B5FD0DF5FACD1E0F3D653D1A851"" referrerpolicy=""no-referrer"" alt=""img"" style=""width: 100%;"">
<img src=""https://uploadfiles.nowcoder.com/images/20190313/311436_1552458020382_9D068CB2795852038688AA7D0B3AEE7D"" referrerpolicy=""no-referrer"" alt=""img"" style=""width: 100%;"">
上述代码中,parent有一个shared_ptr类型的成员指向孩子,而child也有一个shared_ptr类型的成员指向父亲。然后在创建孩子和父亲对象时也使用了智能指针c和p,随后将c和p分别又赋值给child的智能指针成员parent和parent的智能指针成员child。从而形成了一个循环引用:
<pre><code> "“`
Was this helpful?
0 /
0