1、只能指针 <memory>,shared_ptr unique_pty weak_ptr;
2、使用 make_shared<T> (args)来动态分配内存,返回shared指针;
3、共享指针,有一个引用计数,计数器变为0则销毁动态对象;主要用于,程序不知道自己使用多少个对象(如STL容器)、程序不知道对象的准确类型、程序需要在多个对象间共享数据; 注意智能指针可以利用类的默认构造、析构、拷贝和赋值构造函数;
4、第三个原因可以理解为,浅拷贝以节省内存;
5、如果不想使用智能指针,可以使用new delete 直接管理内存;
6、const int * cp = new const int(1023);
7、内存耗尽new会抛出异常,int * p = new (nothrow) int 不会抛出异常,会返回空指针;
8、空悬指针:delete后,指针仍在,且保存着相应的地址,方法是释放内存,将指针置为nullptr;
8、可以使用new 来给智能指针赋值,但是这样无法发挥智能指针的作用,使用make_shared比较合适;
9、虽然智能指针提供了get函数返回一个普通指针,但是这么做风险很大;
10、智能指针只能直接初始化,不能拷贝或者复制初始化;
11、new int[100] ; delete [] p;
12、动态数组在分配对象数组的时候要求对所有对象进行初始化,如果想在使用时在初始化,可以使用allocator类,帮助把内存分配和对象构造分离开来;
13、allocator<string> alloc ; auto const p = alloc.allocate(n);destroy方法,deallocate方法;
14、同时提供了allocator算法,可以提供迭代器来完成对象的构造工作;