diff options
author | Pavel Labath <pavelo@centrum.sk> | 2011-07-22 15:52:58 (GMT) |
---|---|---|
committer | Pavel Labath <pavelo@centrum.sk> | 2011-07-22 15:52:58 (GMT) |
commit | 43951cf82ca554d92b12aadd42f5024e253fbac8 (patch) | |
tree | 4ca89282c8665e37c4002cd6d362307d26740524 /src/FbTk | |
parent | 7db1ffea7e58131d077d2065bd54dc29c8473c2c (diff) | |
download | fluxbox_pavel-43951cf82ca554d92b12aadd42f5024e253fbac8.zip fluxbox_pavel-43951cf82ca554d92b12aadd42f5024e253fbac8.tar.bz2 |
Remove the assignment operator from a regular pointer to a RefCount
it is too easy too shoot yourself in the foot with it, other smart pointers also don't allow such
assignments. If you do want to assign to a RefCount pointer, use reset().
ps: assignment between two RefCounts remains possible, of course.
Diffstat (limited to 'src/FbTk')
-rw-r--r-- | src/FbTk/LogicCommands.cc | 8 | ||||
-rw-r--r-- | src/FbTk/MacroCommand.cc | 2 | ||||
-rw-r--r-- | src/FbTk/RefCount.hh | 6 |
3 files changed, 7 insertions, 9 deletions
diff --git a/src/FbTk/LogicCommands.cc b/src/FbTk/LogicCommands.cc index bda67f5..121823f 100644 --- a/src/FbTk/LogicCommands.cc +++ b/src/FbTk/LogicCommands.cc | |||
@@ -43,7 +43,7 @@ M *addCommands(M *macro, const string &args, bool trusted) { | |||
43 | 43 | ||
44 | std::vector<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); | 44 | std::vector<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); |
45 | for (; it != it_end; ++it) { | 45 | for (; it != it_end; ++it) { |
46 | cmd = CommandParser<bool>::instance().parse(*it, trusted); | 46 | cmd.reset( CommandParser<bool>::instance().parse(*it, trusted) ); |
47 | if (cmd) | 47 | if (cmd) |
48 | macro->add(cmd); | 48 | macro->add(cmd); |
49 | } | 49 | } |
@@ -90,13 +90,13 @@ Command<void> *IfCommand::parse(const std::string &command, const std::string &a | |||
90 | if (cmds.size() < 2) | 90 | if (cmds.size() < 2) |
91 | return 0; | 91 | return 0; |
92 | 92 | ||
93 | cond = CommandParser<bool>::instance().parse(cmds[0], trusted); | 93 | cond.reset( CommandParser<bool>::instance().parse(cmds[0], trusted) ); |
94 | if (cond == 0) | 94 | if (cond == 0) |
95 | return 0; | 95 | return 0; |
96 | 96 | ||
97 | t = CommandParser<void>::instance().parse(cmds[1], trusted); | 97 | t.reset( CommandParser<void>::instance().parse(cmds[1], trusted) ); |
98 | if (cmds.size() >= 3) | 98 | if (cmds.size() >= 3) |
99 | f = CommandParser<void>::instance().parse(cmds[2], trusted); | 99 | f.reset( CommandParser<void>::instance().parse(cmds[2], trusted) ); |
100 | if (t == 0 && f == 0) | 100 | if (t == 0 && f == 0) |
101 | return 0; | 101 | return 0; |
102 | 102 | ||
diff --git a/src/FbTk/MacroCommand.cc b/src/FbTk/MacroCommand.cc index e04d92a..549f2da 100644 --- a/src/FbTk/MacroCommand.cc +++ b/src/FbTk/MacroCommand.cc | |||
@@ -41,7 +41,7 @@ M *addCommands(M *macro, const std::string &args, bool trusted) { | |||
41 | if (remainder.length() == 0) { | 41 | if (remainder.length() == 0) { |
42 | std::list<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); | 42 | std::list<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); |
43 | for (; it != it_end; ++it) { | 43 | for (; it != it_end; ++it) { |
44 | cmd = CommandParser<void>::instance().parse(*it, trusted); | 44 | cmd.reset( CommandParser<void>::instance().parse(*it, trusted) ); |
45 | if (cmd) | 45 | if (cmd) |
46 | macro->add(cmd); | 46 | macro->add(cmd); |
47 | } | 47 | } |
diff --git a/src/FbTk/RefCount.hh b/src/FbTk/RefCount.hh index 2595864..cc8c917 100644 --- a/src/FbTk/RefCount.hh +++ b/src/FbTk/RefCount.hh | |||
@@ -37,11 +37,10 @@ public: | |||
37 | RefCount(const RefCount<Pointer2> ©); | 37 | RefCount(const RefCount<Pointer2> ©); |
38 | ~RefCount(); | 38 | ~RefCount(); |
39 | RefCount<Pointer> &operator = (const RefCount<Pointer> ©); | 39 | RefCount<Pointer> &operator = (const RefCount<Pointer> ©); |
40 | RefCount<Pointer> &operator = (Pointer *p); | ||
41 | Pointer &operator * () const { return *get(); } | 40 | Pointer &operator * () const { return *get(); } |
42 | Pointer *operator -> () const { return get(); } | 41 | Pointer *operator -> () const { return get(); } |
43 | Pointer *get() const { return m_data; } | 42 | Pointer *get() const { return m_data; } |
44 | void reset(Pointer *p) { *this = p; } | 43 | void reset(Pointer *p = 0); |
45 | /// conversion to "bool" | 44 | /// conversion to "bool" |
46 | operator bool_type() const { return m_data ? &RefCount::m_data : 0; } | 45 | operator bool_type() const { return m_data ? &RefCount::m_data : 0; } |
47 | 46 | ||
@@ -100,12 +99,11 @@ RefCount<Pointer> &RefCount<Pointer>::operator = (const RefCount<Pointer> ©) | |||
100 | } | 99 | } |
101 | 100 | ||
102 | template <typename Pointer> | 101 | template <typename Pointer> |
103 | RefCount<Pointer> &RefCount<Pointer>::operator = (Pointer *p) { | 102 | void RefCount<Pointer>::reset(Pointer *p) { |
104 | decRefCount(); | 103 | decRefCount(); |
105 | m_data = p; // set data pointer | 104 | m_data = p; // set data pointer |
106 | m_refcount = new unsigned int(0); // create new counter | 105 | m_refcount = new unsigned int(0); // create new counter |
107 | incRefCount(); | 106 | incRefCount(); |
108 | return *this; | ||
109 | } | 107 | } |
110 | 108 | ||
111 | template <typename Pointer> | 109 | template <typename Pointer> |