概述
1.智能指针的原理基于一个常见的习语叫做 RAII :资源申请即初始化。
2.智能指针确保在任何情况下,动态分配的内存都能得到正确释放,从而将开发人员从这项任务中解放了出来。 这包括程序因为异常而中断,原本用于释放内存的代码被跳过的场景。
3.一个作用域指针不能传递它所包含的对象的所有权到另一个作用域指针
4.用一个动态分配的对象的地址来初始化智能指针,在析构的时候释放内存,就确保了这一点。 因为析构函数总是会被执行的,这样所包含的内存也将总是会被释放。
对boost手册的补充示例
#include <iostream>
#include <boost/scoped_ptr.hpp>
class demo
{
public:
int get() { return pt; }
void set(int i) { pt = i; }
~demo() { std::cout << "haha" << std::endl; }
private:
int pt;
};
//可作为参数进行传递
void Func(int i, boost::scoped_ptr<demo>)
{
}
int main()
{
/*实现方法: get(), reset(), swap()
*重载运算符: *, ->,
*/
{
//离开作用域后资源不被释放
demo *j = new demo;
boost::scoped_ptr<demo> i(new demo);
//本身值为1,但无实际意义
std::cout << i << std::endl;
//获取保存的类资源地址
std::cout << "get: " << i.get() << std::endl;
}
return 0;
}