File tree 3 files changed +55
-73
lines changed
3 files changed +55
-73
lines changed Original file line number Diff line number Diff line change 3
3
#include " auto_ptr.hpp"
4
4
5
5
// Sample object
6
- class object {
6
+ class object
7
+ {
7
8
public:
8
9
int x;
9
10
10
11
object (int t = 0 ) { x = t; }
11
12
};
12
13
13
-
14
-
15
14
int main ()
16
15
{
17
16
int * arrrr = new int [14 ];
Original file line number Diff line number Diff line change @@ -10,33 +10,24 @@ class auto_ptr
10
10
deleter <T> del;
11
11
12
12
public:
13
- explicit auto_ptr (T * p = 0 )
14
- {
15
- ptr = p;
16
- }
17
-
18
- explicit auto_ptr (T * p, const deleter <T> & d)
19
- {
20
- ptr = p;
21
- del = d;
13
+ explicit auto_ptr (T * p, const deleter <T> & d) : ptr (p), del (d) { }
14
+
15
+ ~auto_ptr ()
16
+ {
17
+ if (! isNull ())
18
+ {
19
+ std::cout << " At address " << this ;
20
+ del ( ptr);
21
+ }
22
22
}
23
-
24
- ~auto_ptr ()
25
- {
26
- if (!isNull ())
27
- {
28
- std::cout << " At address " << this ;
29
- del (ptr);
30
- }
31
- }
32
23
33
24
auto_ptr (auto_ptr <T> & p)
34
25
{
35
26
if (!isNull ())
36
- {
37
- std::cout << " At address " << &p;
38
- p.del (p.ptr );
39
- }
27
+ {
28
+ std::cout << " At address " << &p;
29
+ p.del (p.ptr );
30
+ }
40
31
ptr = p.pointer ();
41
32
p.ptr = 0 ;
42
33
}
@@ -45,32 +36,32 @@ class auto_ptr
45
36
{
46
37
if (this != &p)
47
38
{
48
- if (!isNull ())
49
- {
50
- std::cout << " At address " << this ;
51
- del (ptr);
52
- }
53
- ptr = p.pointer ();
54
- p.ptr = 0 ;
39
+ if (!isNull ())
40
+ {
41
+ std::cout << " At address " << this ;
42
+ del (ptr);
43
+ }
44
+ ptr = p.pointer ();
45
+ p.ptr = 0 ;
55
46
}
56
47
return *this ;
57
48
}
58
49
59
- T & operator * () const
60
- {
61
- return *ptr;
50
+ T & operator * () const
51
+ {
52
+ return *ptr;
62
53
}
63
54
64
- T * operator -> () const
65
- {
66
- return ptr;
55
+ T * operator -> () const
56
+ {
57
+ return ptr;
67
58
}
68
-
69
- T * pointer () const
70
- {
71
- return ptr;
59
+
60
+ T * pointer () const
61
+ {
62
+ return ptr;
72
63
}
73
-
64
+
74
65
bool isNull () const
75
66
{
76
67
return ptr == 0 ;
Original file line number Diff line number Diff line change @@ -6,48 +6,40 @@ template <class T>
6
6
class scoped_ptr
7
7
{
8
8
private:
9
- explicit scoped_ptr (const scoped_ptr <T> & p) { } // call not permitted
10
- scoped_ptr <T> & operator = (const scoped_ptr <T> & p) const { } // call not permitted
9
+ scoped_ptr (const scoped_ptr <T> & p) throw (); // call not permitted
10
+
11
+ scoped_ptr <T> & operator = (const scoped_ptr <T> & p) const throw (); // call not permitted
11
12
12
13
T * ptr;
13
14
deleter <T> del;
14
15
15
16
public:
16
- explicit scoped_ptr (T * p = 0 )
17
- {
18
- ptr = p;
19
- }
20
-
21
- explicit scoped_ptr (T * p, const deleter <T> & d)
22
- {
23
- ptr = p;
24
- del = d;
17
+ explicit scoped_ptr (T * p, const deleter <T> & d) : ptr (p), del (d) { }
18
+
19
+ ~scoped_ptr ()
20
+ {
21
+ if (! isNull ())
22
+ {
23
+ std::cout << " At address " << this ;
24
+ del ( ptr);
25
+ }
25
26
}
26
27
27
- ~scoped_ptr ()
28
- {
29
- if (!isNull ())
30
- {
31
- std::cout << " At address " << this ;
32
- del (ptr);
33
- }
34
- }
35
-
36
- T & operator * () const
37
- {
38
- return *ptr;
28
+ T & operator * () const
29
+ {
30
+ return *ptr;
39
31
}
40
32
41
- T * operator -> () const
42
- {
43
- return ptr;
33
+ T * operator -> () const
34
+ {
35
+ return ptr;
44
36
}
45
37
46
- T * pointer () const
47
- {
48
- return ptr;
38
+ T * pointer () const
39
+ {
40
+ return ptr;
49
41
}
50
-
42
+
51
43
bool isNull () const
52
44
{
53
45
return ptr == 0 ;
You can’t perform that action at this time.
0 commit comments