你什么都不用做。当您指定新创建的
shared_ptr
到
theBase
,旧的参考计数器将递减。然而,旧的计数器是1(如果我们假设您没有在其他地方引用它)。计数器达到0,并调用析构函数。
请看以下代码:
#include <stdio.h>
#include <memory>
class myClass
{
public:
myClass(int i) : m_i(i) { printf("Constructed %d\n", m_i); }
~myClass() { printf("Destructed %d\n", m_i); }
int m_i;
};
int main()
{
std::shared_ptr<myClass> ptr = std::make_shared<myClass>(5);
ptr = std::make_shared<myClass>(10);
}
输出为:
Constructed 5
Constructed 10
Destructed 5
Destructed 10
第一个指针在创建第二个指针后立即被销毁(更具体地说是在赋值时;这就是第一个指针的计数器递减的地方)。