C++智能指针释放问题?

我想问一下,c++中的智能指针shared_ptr当引用计数为0时会自动释放内存,但如果程序结束时引用计数不为0,不就不会被释放吗?这不和普通指针一样了?

计数不为0,说明它还在使用中,不释放,这没问题啊。
普通指针需要自己管理、销毁,很容易忘记,而智能指针不用自己这么操心,不好吗

  • 看下这篇博客,也许你就懂了,链接:c++智能指针特点
  • 除此之外, 这篇博客: 【C++】智能指针如何实现引用计数?用static计数会产生什么问题?中的 3.shared_ptr指针的引用计数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 当进行拷贝和赋值操作时,每个shared_ptr都会记录有多少个其他shared_ptr指向相同的对象。在每个shared_ptr都有一个关联的计数器,通常称其为引用计数。无论何时我们拷贝一个shared_ptr,计数器都会递增。例如,当用一个shared_ptr初始化另一个shared_ptr,或将它作为参数传递给一个函数以及作为函数的返回值吗,它所关联的计数器就会递增。当我们给shared_ptr赋予一个新值或是shared_ptr被销毁,计数器就会递减。当shared_ptr的计数器变为0,它就会自动释放自己管理的对象。

    到底是用一个计数器还是其他数据结构来记录有多少指针共享对象,完全由标准库的具体实现来决定。关键是智能指针类能记录有多少个shared_ptr指向相同的对象,并能在恰当的时候自动释放对象。