1、以对象管理资源:在构造函数中获取资源,离开作用域,析构函数自动释放资源。如使用智能指针对象管理资源。
2、禁止复制(私有复制、赋值运算符)、引用计数等方法管理资源的拷贝。
3、类的指针成员变量也用智能指针对象包含,这样在构造函数为该成员初始化发生异常离开作用域时,自动释放内存。而不需要手动delete
(且对象构造一半时无法使用析构函数释放内存)。
//.h
Class A{
int xx;
public:
void show();
operator int();
};
//.cpp
void express(A* a){ ... }
std::shared_ptr<A> ptr(new A); //智能指针
express(ptr.get()); //get()函数返回智能指针中的原始指针;显式获取原始资源
ptr->show(); //智能指针也重载了->运算符。
(*ptr).show(); //智能指针也重载了 . 运算符。
A a;
int x1 = a; //隐式类型转换,获取资源管理类的原始资源
隐式获取原始资源易用,显式获取原始资源安全
以独立语句将newed对象存储于智能指针内,若不这样做,一旦抛出异常可能导致资源泄露:
std::shared_ptr<A> ptr(new A); //智能指针
process(ptr);
参考资料:Effective C++ 条款13-17
总结:
1、ptr.get()
获取原始资源。
2、通过隐式类型转换获取原始资源