@@ -218,11 +218,6 @@ class RefCountersImpl final : public IReferenceCounters
218218
219219 RefCountersImpl () noexcept
220220 {
221- m_lNumStrongReferences = 0 ;
222- m_lNumWeakReferences = 0 ;
223- #ifdef DILIGENT_DEBUG
224- memset (m_ObjectWrapperBuffer, 0 , sizeof (m_ObjectWrapperBuffer));
225- #endif
226221 }
227222
228223 class ObjectWrapperBase
@@ -392,11 +387,9 @@ class RefCountersImpl final : public IReferenceCounters
392387 // So we copy the object wrapper and destroy the object after unlocking the
393388 // reference counters
394389 size_t ObjectWrapperBufferCopy[ObjectWrapperBufferSize];
395- for (size_t i = 0 ; i < ObjectWrapperBufferSize; ++i)
396- ObjectWrapperBufferCopy[i] = m_ObjectWrapperBuffer[i];
397- #ifdef DILIGENT_DEBUG
390+ memcpy (ObjectWrapperBufferCopy, m_ObjectWrapperBuffer, sizeof (m_ObjectWrapperBuffer));
398391 memset (m_ObjectWrapperBuffer, 0 , sizeof (m_ObjectWrapperBuffer));
399- # endif
392+
400393 auto * pWrapper = reinterpret_cast <ObjectWrapperBase*>(ObjectWrapperBufferCopy);
401394
402395 // In a multithreaded environment, reference counters object may
@@ -480,10 +473,13 @@ class RefCountersImpl final : public IReferenceCounters
480473 // which does have virtual destructor.
481474 static constexpr size_t ObjectWrapperBufferSize = sizeof (ObjectWrapper<IObjectStub, IMemoryAllocator>) / sizeof (size_t );
482475
483- size_t m_ObjectWrapperBuffer[ObjectWrapperBufferSize];
484- Atomics::AtomicLong m_lNumStrongReferences;
485- Atomics::AtomicLong m_lNumWeakReferences;
476+ size_t m_ObjectWrapperBuffer[ObjectWrapperBufferSize]{};
477+
478+ Atomics::AtomicLong m_lNumStrongReferences{0 };
479+ Atomics::AtomicLong m_lNumWeakReferences{0 };
480+
486481 ThreadingTools::LockFlag m_LockFlag;
482+
487483 enum class ObjectState : Int32
488484 {
489485 NotInitialized,
0 commit comments