summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/plists.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/plists.h')
-rw-r--r--src/lib/netlist/plib/plists.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/lib/netlist/plib/plists.h b/src/lib/netlist/plib/plists.h
index c2fee9c2f8e..525a65a97f2 100644
--- a/src/lib/netlist/plib/plists.h
+++ b/src/lib/netlist/plib/plists.h
@@ -34,13 +34,18 @@ public:
using iterator = C *;
using const_iterator = const C *;
- uninitialised_array_t() noexcept = default;
+ //uninitialised_array_t() noexcept = default;
+ uninitialised_array_t() noexcept
+ : m_initialized(0)
+ {
+ }
COPYASSIGNMOVE(uninitialised_array_t, delete)
~uninitialised_array_t() noexcept
{
- for (std::size_t i=0; i<N; i++)
- (*this)[i].~C();
+ if (m_initialized>=N)
+ for (std::size_t i=0; i<N; i++)
+ (*this)[i].~C();
}
size_t size() const { return N; }
@@ -58,6 +63,7 @@ public:
template<typename... Args>
void emplace(const std::size_t index, Args&&... args)
{
+ m_initialized++;
// allocate on buffer
new (&m_buf[index]) C(std::forward<Args>(args)...);
}
@@ -78,6 +84,7 @@ private:
/* ensure proper alignment */
PALIGNAS_VECTOROPT()
std::array<typename std::aligned_storage<sizeof(C), alignof(C)>::type, N> m_buf;
+ unsigned m_initialized;
};
// ----------------------------------------------------------------------------------------