设为首页 加入收藏

TOP

C++中的智能指针实现(二)
2019-05-23 20:08:25 】 浏览:96
Tags:智能 指针 实现
st
7 { 8 int i; 9 public: 10 Test(int i) 11 { 12 cout << "Test(int i)" << endl; 13 this->i = i; 14 } 15 int value() 16 { 17 return i; 18 } 19 ~Test() 20 { 21 cout << "~Test()" << endl; 22 } 23 }; 24 25 class Pointer 26 { 27 Test* mp; 28 public: 29 /* 满足需求分析的第一点 */ 30 Pointer(Test* p = NULL) 31 { 32 mp = p; 33 } 34 35 /* 以下两个函数做了需求分析的第三点 */ 36 37 Pointer(const Pointer& obj) 38 { 39 // delete mp; // 还在拷贝构造,这个时候 mp 还是野指针; 40 mp = obj.mp; // 传递堆空间的控制; 41 const_cast<Pointer&>(obj).mp = NULL;//初始化对象不管之前的;堆空间了,做所有权的转移,保证堆空间最多只能由一个对象被标识; 42 } 43 Pointer& operator = (const Pointer& obj) 44 { 45 if( this != &obj ) 46 { 47 delete mp; 48 mp = obj.mp; 49 const_cast<Pointer&>(obj).mp = NULL; 50 } 51 52 return *this; 53 } 54 Test* operator -> () // 返回指针,准备指示; 55 { 56 return mp; 57 } 58 Test& operator * () // 解引用,返回对象; 59 { 60 return *mp; 61 } 62 bool isNull() 63 { 64 return (mp == NULL); 65 } 66 ~Pointer() // 释放成员指针指向的堆空间,需求分析的第二点; 67 { 68 delete mp; 69 } 70 }; 71 72 int main() 73 { 74 Pointer p1 = new Test(0); // ==> Test* p1 = new Test(0); 75 76 cout << p1->value() << endl; 77 78 Pointer p2 = p1; // 这里对象拷贝构造函数; 79 80 cout << p1.isNull() << endl; 81 82 cout << p2->value() << endl; 83 84 return 0; 85 }

   2,输出结果:

1 Test(int i)

2 0

3 1

4 0

5 ~Test() 

        3,智能指针没有定义对象运算和对象比较的操作符,所以就满足了需求分         析的第四点;

    4,智能指针使用军规:

        1,只能用来指向堆空间中的对象或者变量;

        (2),不能使用智能指针指向栈空间中的对象;

      

6,小结:

    1,指针特征操作符(-> 和 *)可以被重载;

    2,重载指针特征符能够使对象代替指针;

    3,智能指针只能用于指向堆空间中的内存;

    4,智能指针的意义在于最大程度的避免内存问题;

       1,使用智能指针代替 C 中的原生指针,这是智能指针的工程意义;

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++中前置操作符和后置操作符的重.. 下一篇C++中的数组操作符重载

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目