自定义智能指针和重载相关操作符

自定义智能指针和重载相关操作符

智能指针

1620751405770

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
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<memory>

using namespace std;

class A
{
public:
A();
~A();
A(int x) { a = x; }
void printf() {
cout << a << endl;
}
private:
int a;
};

A::A()
{
cout << "A()..." << endl;
}

A::~A()
{
cout << "~A()..." << endl;
}

void test() {
//智能指针,不需要手动delete
auto_ptr<A> a(new A(10));

a->printf();
}

int main(char *argv[], int argc)
{
test();

return 0;
}

自定义智能指针和重载-> *操作符

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>


using namespace std;

class A
{
public:
A();
A(int x) { a = x; cout << "A(int x).." << endl; }
~A();
int getA() { return a; }
private:
int a;
};
//自定义智能指针类
class MyPtr
{
public:
MyPtr();
MyPtr(A * tPtr) { ptr = tPtr; }

//重载->操作符
A * operator->() {
return ptr;
}
//重载*操作符
A & operator*() {
return *ptr;
}
~MyPtr();

private:
A * ptr;
};


MyPtr::MyPtr()
{
ptr = NULL;
}

MyPtr::~MyPtr()
{
if (ptr != NULL)
{

delete ptr;
ptr = NULL;
}
}


A::A()
{
cout << "A()..." << endl;
}

A::~A()
{
cout << "~A()..." << endl;
}

void test1() {
MyPtr mP(new A(20));
cout << mP->getA() << endl;
cout << (*mP).getA() << endl;

}

int main(char *argv[], int argc)
{
test1();

return 0;
}