Skip to content

Commit 5d93e69

Browse files
committed
Smart Pointers Fixed
1 parent fc4eb17 commit 5d93e69

File tree

3 files changed

+55
-73
lines changed

3 files changed

+55
-73
lines changed

SmartPointers/SmartPointers.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
#include "auto_ptr.hpp"
44

55
// Sample object
6-
class object {
6+
class object
7+
{
78
public:
89
int x;
910

1011
object(int t = 0) { x = t; }
1112
};
1213

13-
14-
1514
int main ()
1615
{
1716
int * arrrr = new int[14];

SmartPointers/auto_ptr.hpp

+31-40
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,24 @@ class auto_ptr
1010
deleter <T> del;
1111

1212
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+
}
2222
}
23-
24-
~auto_ptr()
25-
{
26-
if (!isNull())
27-
{
28-
std::cout << "At address " << this;
29-
del(ptr);
30-
}
31-
}
3223

3324
auto_ptr(auto_ptr <T> & p)
3425
{
3526
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+
}
4031
ptr = p.pointer();
4132
p.ptr = 0;
4233
}
@@ -45,32 +36,32 @@ class auto_ptr
4536
{
4637
if (this != &p)
4738
{
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;
5546
}
5647
return *this;
5748
}
5849

59-
T & operator * () const
60-
{
61-
return *ptr;
50+
T & operator * () const
51+
{
52+
return *ptr;
6253
}
6354

64-
T * operator -> () const
65-
{
66-
return ptr;
55+
T * operator -> () const
56+
{
57+
return ptr;
6758
}
68-
69-
T * pointer () const
70-
{
71-
return ptr;
59+
60+
T * pointer () const
61+
{
62+
return ptr;
7263
}
73-
64+
7465
bool isNull () const
7566
{
7667
return ptr == 0;

SmartPointers/scoped_ptr.hpp

+22-30
Original file line numberDiff line numberDiff line change
@@ -6,48 +6,40 @@ template <class T>
66
class scoped_ptr
77
{
88
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
1112

1213
T * ptr;
1314
deleter <T> del;
1415

1516
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+
}
2526
}
2627

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;
3931
}
4032

41-
T * operator -> () const
42-
{
43-
return ptr;
33+
T * operator -> () const
34+
{
35+
return ptr;
4436
}
4537

46-
T * pointer () const
47-
{
48-
return ptr;
38+
T * pointer () const
39+
{
40+
return ptr;
4941
}
50-
42+
5143
bool isNull () const
5244
{
5345
return ptr == 0;

0 commit comments

Comments
 (0)