C++shared_ptr以及get成员函数的使用

#include 
#include 
using namespace std;
int main()
{
    shared_ptr<int> p(new int(42));
    int *q = p.get();
    {
        shared_ptr<int>(q); //这一句
    } 
    int foo = *p;
    cout << foo << endl;
    return 0;
}

C++primer中的例子,求解释大括号中的什么意思,以及程序的输出为什么是42?

大括号中定义了第二个 shared_ptr 对象,虽然没有名字。
大括号中的代码会导致 q 指针指向的整数对象被析构删除,因为与第一个并不共享。
所以第一个 shared_ptr 里面的指针,指向了无效内存。
输出 42 是正常的,即使对象被析构,内存有可能还在,保存的数值也没有变。

你为何会输出42,因为那段大括号里面的代码被优化。如果你把那个匿名的share_ptr命名,或者在大括号中访问*q,则会出错

shared_ptr是智能指针
 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来)。
get就是获取智能指针存储的指针,因为这个指针指向空间存储的是42(new的时候初始化的),所以输出42