C++11 之后有3中智能指针,std::unique_ptr、std::shared_ptr和 std::weak_ptr。
unique_ptr类似于普通指针,但是在unique_ptr超出作用域或者删除时,会自动释放内存或资源。unique_ptr只属于它指向的对象。unique_ptr的一个有点时,发生异常的时候,必须释放存储空间。可以使用std::make_unique<>()创建unique_ptr。
auto anEmployee = std::make_unique<Employee>();
shared_ptr允许数据的分布式“所有权”,每次指定shared_ptr时,都递增一个引用计数,指出数据又多了一个“拥有者”。shared_ptr超出作用域时,就递减引用计数。当引用计数为0,就表示数据不再有任何拥有者,于是释放指针引用的对象。不能再shared_ptr中存储数组。使用std::make_shared<>()可以创建shared_ptr。使用weak_ptr可以观察shared_ptr,而不会递增或递减所链接的shared_ptr的引用计数。防止循环引用的产生。
//参考C++高级编程第三版