summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-04-10 13:43:05 +0000
committerMike Buland <eichlan@xagasoft.com>2007-04-10 13:43:05 +0000
commit79ee50a1cf4415e214298bf696aa3fc44e308d02 (patch)
treedb6ddd49e0671f1c9a8f72147b1e3314182e96e7
parent531761d77331915b3e6495d10e03191ba10c04d2 (diff)
downloadlibbu++-79ee50a1cf4415e214298bf696aa3fc44e308d02.tar.gz
libbu++-79ee50a1cf4415e214298bf696aa3fc44e308d02.tar.bz2
libbu++-79ee50a1cf4415e214298bf696aa3fc44e308d02.tar.xz
libbu++-79ee50a1cf4415e214298bf696aa3fc44e308d02.zip
David had it half right...to make it work like something that's actually a const
pointer he's right, the pointer needs to be rebindable, but for a: const int *p; p can be changed, but not what p points to. I've added the rest of the operators in sptr that should accomplish this, and a test that actually tests the correctness of SPtr used this way against a normal pointer, both tests check out 100%, hopefully this dosen't break anything, but if it should act like a pointer, this is how to do it. (I totally forgot that const pointers were rebindable).
-rw-r--r--src/sptr.h14
-rw-r--r--src/tests/constsptr2.cpp30
2 files changed, 42 insertions, 2 deletions
diff --git a/src/sptr.h b/src/sptr.h
index 9a6a2d6..3304501 100644
--- a/src/sptr.h
+++ b/src/sptr.h
@@ -45,16 +45,26 @@ public:
45 return *pRefCnt; 45 return *pRefCnt;
46 } 46 }
47 47
48 T *operator->() const 48 const T *operator->() const
49 { 49 {
50 return pData; 50 return pData;
51 } 51 }
52 52
53 T *operator*() const 53 const T &operator*() const
54 {
55 return *pData;
56 }
57
58 T *operator->()
54 { 59 {
55 return pData; 60 return pData;
56 } 61 }
57 62
63 T &operator*()
64 {
65 return *pData;
66 }
67
58 SPtr<T> operator=( const SPtr<T> &src ) 68 SPtr<T> operator=( const SPtr<T> &src )
59 { 69 {
60 decCount(); 70 decCount();
diff --git a/src/tests/constsptr2.cpp b/src/tests/constsptr2.cpp
new file mode 100644
index 0000000..8ccb20c
--- /dev/null
+++ b/src/tests/constsptr2.cpp
@@ -0,0 +1,30 @@
1#include "sptr.h"
2
3void nonsptr()
4{
5 int a = 5;
6 int b = 10;
7 const int *p = &a;
8 p = &b;
9 printf("p = %d\n", (*p) );
10 //(*p)++;
11}
12
13void sptr()
14{
15 int a = 5;
16 int b = 10;
17 const SPtr<int> p = new int(a);
18 p = new int(b);
19 printf("p = %d\n", (*p) );
20 //(*p)++;
21}
22
23int main()
24{
25 printf("Non-sptr:\n");
26 nonsptr();
27 printf("sptr:\n");
28 sptr();
29}
30