diff --git a/ntcore/src/main/native/cpp/InstanceImpl.cpp b/ntcore/src/main/native/cpp/InstanceImpl.cpp index 66bb56a446..3b34292dcc 100644 --- a/ntcore/src/main/native/cpp/InstanceImpl.cpp +++ b/ntcore/src/main/native/cpp/InstanceImpl.cpp @@ -11,7 +11,7 @@ using namespace nt; std::atomic InstanceImpl::s_default{-1}; std::atomic InstanceImpl::s_fast_instances[10]; -wpi::UidVector, 10> InstanceImpl::s_instances; +wpi::UidVector InstanceImpl::s_instances; wpi::mutex InstanceImpl::s_mutex; using namespace std::placeholders; @@ -54,7 +54,7 @@ InstanceImpl* InstanceImpl::Get(int inst) { // vector if (static_cast(inst) < s_instances.size()) { - return s_instances[inst].get(); + return s_instances[inst]; } // doesn't exist @@ -84,9 +84,9 @@ int InstanceImpl::Alloc() { } int InstanceImpl::AllocImpl() { - unsigned int inst = s_instances.emplace_back(); + unsigned int inst = s_instances.emplace_back(nullptr); InstanceImpl* ptr = new InstanceImpl(inst); - s_instances[inst].reset(ptr); + s_instances[inst] = ptr; if (inst < (sizeof(s_fast_instances) / sizeof(s_fast_instances[0]))) { s_fast_instances[inst] = ptr; @@ -104,5 +104,6 @@ void InstanceImpl::Destroy(int inst) { s_fast_instances[inst] = nullptr; } + delete s_instances[inst]; s_instances.erase(inst); } diff --git a/ntcore/src/main/native/cpp/InstanceImpl.h b/ntcore/src/main/native/cpp/InstanceImpl.h index 32a7aac8e6..6e732d8439 100644 --- a/ntcore/src/main/native/cpp/InstanceImpl.h +++ b/ntcore/src/main/native/cpp/InstanceImpl.h @@ -51,7 +51,7 @@ class InstanceImpl { static std::atomic s_default; static std::atomic s_fast_instances[10]; - static wpi::UidVector, 10> s_instances; + static wpi::UidVector s_instances; static wpi::mutex s_mutex; };