1 为什么有智能指针
对于C/C++的程序,时刻要绷着一根玄,就是内存泄漏问题。这个工程肯定要用到指针。为了能方便后续程序的开发,先建立一个智能指针的类。这类应该满足:
- 指针的生命周期结束后,指针指向的内存也会随之释放
- 一段空间,只能有一个指针表示
- 杜绝指针的运算
2 设计方案
- 1 利用C++ 语言的析构的功能,做一个C++的类。在这个指针类生命结束时,在析构函数里释放空间。
- 2 利用对象模拟原生指针的行为。例如:重载指针的特征操作符 '->' 和
3 代码实现
3.1 类的内容
重载 ‘ * ’ 和 ‘ -> ’ 操作符,实现 指针的基本运算功能。
T& operator * (); T* operator -> ();
设计拷贝构造函数和对 ’=‘的重载,实现一段内存只有一个指针标识的要求。
SmartPointer<T>& operator = (const SmartPointer<T>& obj ); SmartPointer( const SmartPointer<T>& obj );
3.2 类的实现
template< typename T>
class SmartPointer
{
protected:
T* m_pointer;
public:
SmartPointer( T* p=nullptr )
{
m_pointer = p;
}
SmartPointer( const SmartPointer<T>& obj )
{
m_pointer= obj.m_pointer;
const_cast< SmartPointer<T>& >( obj).m_pointer =nullptr;
}
SmartPointer<T>& operator = (const SmartPointer<T>& obj)
{
if( this != &obj)
{
delete m_pointer;
m_pointer= obj.m_pointer;
const_cast<const SmartPointer<T>& >( obj).m_pointer =nullptr;
}
return *this;
}
T& operator * ()
{
return *m_pointer;
}
T* operator -> ()
{
return m_pointer;
}
bool isNull()
{
return (m_pointer == nullptr) ;
}
T* getPointer()
{
return m_pointer;
}
~SmartPointer()
{
delete m_pointer;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。