我想问一下,c++中的智能指针shared_ptr当引用计数为0时会自动释放内存,但如果程序结束时引用计数不为0,不就不会被释放吗?这不和普通指针一样了?
计数不为0,说明它还在使用中,不释放,这没问题啊。
普通指针需要自己管理、销毁,很容易忘记,而智能指针不用自己这么操心,不好吗
当进行拷贝和赋值操作时,每个shared_ptr都会记录有多少个其他shared_ptr指向相同的对象。在每个shared_ptr都有一个关联的计数器,通常称其为引用计数。无论何时我们拷贝一个shared_ptr,计数器都会递增。例如,当用一个shared_ptr初始化另一个shared_ptr,或将它作为参数传递给一个函数以及作为函数的返回值吗,它所关联的计数器就会递增。当我们给shared_ptr赋予一个新值或是shared_ptr被销毁,计数器就会递减。当shared_ptr的计数器变为0,它就会自动释放自己管理的对象。
到底是用一个计数器还是其他数据结构来记录有多少指针共享对象,完全由标准库的具体实现来决定。关键是智能指针类能记录有多少个shared_ptr指向相同的对象,并能在恰当的时候自动释放对象。