C++运算符重载之智能指针

C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。

既然有了需求,对此,我们可以自行打造智能指针。

Person类有show_age()成员函数。

如果new出来的Person对象,那么必须由我们自行delete。

有了智能指针,就可以让智能指针托管这个对象,这个对象的释放就不用担心了,由智能指针自动进行管理。

为了让智能指针像普通指针一样方便实用,就要重载 -> 与解引用 * 运算符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>
using namespace std;
class Person {
public:
Person():age(0){}
Person(int age):age(age){}
~Person() {
cout << "析构调用" << endl;
}
void show_age() {
cout << "我的年龄是" << this->age << endl;
}
private:
int age;
};
class SmartPointer {
public:
SmartPointer():person(NULL){}
SmartPointer(Person*person) {
this->person = person;
}
~SmartPointer() {
if (person != NULL) {
delete person;
person = NULL;
}
cout << "智能指针析构调用" << endl;
}
Person* operator ->() {
return this->person;
}
Person& operator *() {
return *this->person;
}
private:
Person *person;
};
void test() {
//Person p1(10);
//p1.show_age();
//Person *p1 = new Person(10);
//p1->show_age();
//delete p1;
SmartPointer sp(new Person(10));
sp->show_age();
(*sp).show_age();
}
int main() {
test();
system("pause");
return 0;
}

文章结束了,但我们的故事还在继续
坚持原创技术分享,您的支持将鼓励我继续创作!