#include <iostream>
#include <memory>
int main()
{
int *p3 = nullptr;
int *p4 = nullptr;
{
std::shared_ptr<int> p1 = std::make_shared<int>(10); // 用make_shared初始化,开辟一个空间
std::shared_ptr<int> p2 = std::shared_ptr<int>(new int(5)); // 用new开辟一个空间存放10
p3 = p1.get(); // 把智能指针p1中10的地址拿出来 放到一个普通的指针p3中
p4 = p2.get(); // 把智能指针p2中5的地址拿出来 放到一个普通的指针p4中
std::cout << *p3 << std::endl; // 将普通指针拿出来解引用,打印为10
std::cout << *p4 << std::endl; // 将普通指针拿出来解引用,打印为5
}
std::cout << "*********"<<std::endl;
std::cout << *p3 << std::endl; // 离开作用域,将普通指针p3拿出来解引用,发现智能指针 p1 没有 将内存释放,打印结果仍然为10
std::cout << *p4 << std::endl; // 离开作用域,将普通指针p4拿出来解引用,发现智能指针 p2 已经 将内存释放
}
上述程序输出的结果为
为啥用同样是智能指针。
make_shared开辟的空间离开作用域,不会被释放
用new开辟的空间,离开作用域,会被释放
有点懵逼,求解惑。