smart pointer 三兄弟性格各异。unque_ptr是独来独往,shared_ptr是左拥右抱,而weak_ptr生来就不是为了单打独斗,了解之后你会发现他总是和shared_ptr出双入对。
既然shared_ptr是智能指针,那理所应当不会发生内存泄漏,那么为什么👆还会说“避免shared_ptr内存泄漏”呢?我们不禁疑惑👇
shared_ptr怎么导致的内存泄漏?
我们知道shared_ptr的特性是:内含一个计数器(可能是计数器,也可能其他数据结构),掌握着share某对象的指针的数量(shared_ptr.use_count()可知),当计数器值为0时,它寿终正寝连带它的对象也一起陪葬(被它的析构函数销毁),好不霸道。但就是这么强势的它,也有翻船(发生内存泄漏)的时候---循环引用。
而且在使用过程中,特别是子类智能指针赋值给父类智能指针的时候,父类指针需要使用weak_ptr,否则会导致内存“free(): invalid pointer” error