1 #include <iostream> // 标准的输入输出
2 using namespace std;
3
4 class Person {
5 public:
6 Person(int a)
7 {
8 ¦ m_A = a;
9 };
10 void showage()
11 {
12 ¦ cout << "showage函数调用" << endl;
13 }
14
15 ~Person()
16 {
17 ¦ cout << "Person析构调用了" << endl;
18 }
19
20 int m_A;
21 };
22
23 // 创建智能指针
24 class spointer {
25
26 public:
27 // 提供托管函数
28
29 spointer(Person* person)
30 {
31 ¦ this->person = person;
32 }
33
34 // 析构函数
35 ~spointer()
36 {
37 ¦ cout << " 智能指针析构了" << endl;
38 ¦ if (this->person != NULL) {
39 ¦ ¦ delete this->person;
40 ¦ ¦ this->person = NULL;
41 ¦ }
42 }
43
44 // 重载->让智能指针像Person *一样去使用
45 Person* operator->()
46 {
47 ¦ return this->person;
48 }
49
50 // 重载* *sp可以直接使用
51 Person* operator*()
52 {
53 ¦ return this->person;
54 }
55
56 private:
57 // 内部托管一个Person对象
58 Person* person;
59 };
60
61 void test01()
62 {
63 // 开辟到了栈上,会自动释放
64 spointer sp(new Person(10));
65 sp->showage();
66 (*sp)->showage();
67 }
68 int main()
69 {
70 test01();
71 return 0;
72 }
c++ 智能指针的实现
最新推荐文章于 2024-02-23 17:27:46 发布