summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/palloc.h
diff options
context:
space:
mode:
author couriersud <couriersud@arcor.de>2016-08-06 04:36:13 +0200
committer couriersud <couriersud@arcor.de>2016-08-06 19:22:28 +0200
commit20a584b348c0e54a80f6fc6d3041788396e930ff (patch)
tree22470978647c9887820634b6935722b60b29f2df /src/lib/netlist/plib/palloc.h
parent4cf6ac6cfd6b07f6768bca42d188609961e5524f (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.h24
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; }