智能指针是为了解决程序员创建了资源而忘记释放造成内存泄漏的问题,可减少代码编写过程中的代码长度,减少程序员对资源管理的难度,因而在COM组件及各类插件中有广泛应用。
1、智能指针的原理
智能指针的原理是利用对象在离开作用域时会调用对象的析构函数,将资源指针封装进类中,并将资源指针的释放过程写入析构函数中,这样就能在对象释放时自动释放资源。
一个管理注册表句柄的智能指针示例如下:
class CSPHKey : public CBase_Uncopy
{
private:
HKEY m_hKey;
public:
CSPHKey(HKEY hKey)
{
m_hKey = hKey;
}
virtual ~CSPHKey()
{
RegCloseKey(m_hKey);
}
}
2、智能指针的注意事项
智能指针由于是用类对象实现的,所以如果有对象复制过程(如函数传值调用),会产生多个智能指针对象,对象释放的过程会多次在析构函数中释放资源,会造成不可预知的意外,故要防止这种情况发生,一般可采取禁止对象复制的方式或者采用引用计数的方式来解决这个问题,下面给出一个Effective C++中的例子,只要继承这个类即可防止对象被复制:
class CBase_Uncopy
{
protected:
订阅专栏 解锁全文
1779

被折叠的 条评论
为什么被折叠?



