vscode + g++
(1).指针生命周期结束时主动释放堆空间
(2).一片堆空间最多只能由一个指针标识
(3).杜绝指针运算和指针比较
(1).通过类模板描述指针的行为
能够定义不同类型的指针对象
(2).重载指针特征操作符(->和*)
利用对象模拟原生指针的行为
- #ifndef SMARTPOINTER_H
- #define SMARTPOINTER_H
-
- #include
- namespace DTLib {
- template <typename T> class SmartPointer {
- protected:
- T *m_pointer;
-
- public:
- SmartPointer(T *p = NULL) { m_pointer = p; } // 默认构造函数
-
- SmartPointer(const SmartPointer
&obj) { // 拷贝构造函数 - m_pointer = obj.m_pointer;
- const_cast
&>(obj).m_pointer = NULL; - }
-
- SmartPointer
&operator=(const SmartPointer &obj) { // 赋值运算符重载 - if (this != &obj) {
- delete m_pointer;
- m_pointer = obj.m_pointer;
- const_cast
&>(obj).m_pointer = NULL; - }
- return *this;
- }
-
- T *operator->() { return m_pointer; } // ->操作符重载
-
- T &operator*() { return *m_pointer; } // *操作符重载
-
- bool isNull() { return (m_pointer == NULL); } // 判断当前指针是否为空
-
- T *get() { return m_pointer; } // 获取当前指针
-
- ~SmartPointer() { delete m_pointer; } // 析构函数
- };
- } // namespace DTLib
-
- #endif
智能指针只能用来指向堆空间中的单个对象或者变量
指针特征操作符(->和*)可以被重载
重载指针特征符能够使用对象代替指针
智能指针只能用于指向堆空间中的内存
智能指针的意义在于最大程度的避免内存问题
喝水不忘挖井人: 更多内容请搜索狄泰软件学院(淘宝/B站)