diff options
author | 2016-08-06 04:36:13 +0200 | |
---|---|---|
committer | 2016-08-06 19:22:28 +0200 | |
commit | 20a584b348c0e54a80f6fc6d3041788396e930ff (patch) | |
tree | 22470978647c9887820634b6935722b60b29f2df /src/lib/netlist/plib/palloc.h | |
parent | 4cf6ac6cfd6b07f6768bca42d188609961e5524f (diff) |
Various netlist fixes:
- minor include cleanup
- fix a memory hole (caused by assign operators)
- more C++.
Diffstat (limited to 'src/lib/netlist/plib/palloc.h')
-rw-r--r-- | src/lib/netlist/plib/palloc.h | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h index fb467fbe173..088320fa7e3 100644 --- a/src/lib/netlist/plib/palloc.h +++ b/src/lib/netlist/plib/palloc.h @@ -117,14 +117,19 @@ public: { } owned_ptr(const owned_ptr &r) = delete; owned_ptr & operator =(owned_ptr &r) = delete; - owned_ptr & operator =(owned_ptr &&r) + + template<typename DC> + owned_ptr & operator =(owned_ptr<DC> &&r) { + if (m_is_owned && (m_ptr != nullptr)) + delete m_ptr; m_is_owned = r.m_is_owned; m_ptr = r.m_ptr; r.m_is_owned = false; r.m_ptr = nullptr; return *this; } + owned_ptr(owned_ptr &&r) { m_is_owned = r.m_is_owned; @@ -143,7 +148,7 @@ public: ~owned_ptr() { - if (m_is_owned && m_ptr != nullptr) + if (m_is_owned && (m_ptr != nullptr)) delete m_ptr; m_is_owned = false; m_ptr = nullptr; @@ -164,25 +169,16 @@ public: a.m_ptr = new SC(std::forward<Args>(args)...); return std::move(a); } - void release() + SC * release() { + SC *tmp = m_ptr; m_is_owned = false; m_ptr = nullptr; + return tmp; } bool is_owned() const { return m_is_owned; } -#if 1 - template<typename DC> - owned_ptr & operator =(owned_ptr<DC> &&r) - { - m_is_owned = r.m_is_owned; - m_ptr = r.m_ptr; - r.m_is_owned = false; - r.m_ptr = nullptr; - return *this; - } -#endif SC * operator ->() const { return m_ptr; } SC & operator *() const { return *m_ptr; } SC * get() const { return m_ptr; } |