Erkennen eines Speicherverlusts in Objekten mit Referenzzählung

Ich versuche zu drucken, auf welcher Zeile addref und release aufgerufen wird. Hier ist Code

Im folgenden Code habe ich eine ReferenceCount-Klasse erstellt, deren Hauptfunktionalität das Erhöhen und Verringern der Referenzanzahl ist. Die Klasse Referencemanager protokolliert den Referenzzähler und löscht das Objekt, sobald es 0 erreicht.

Test1 ist eine Testklasse. Im Wesentlichen erstelle ich einen Test1-Zeiger und verpacke ihn in die CReferenceManager-Klasse. Während der Erstellung der CReferenceManager-Klasse wird nun AddRef aufgerufen und während der Zerstörung würde Release aufgerufen.

Wenn ein Speicherverlust vorliegt, ist es einfacher zu erkennen, ob ich DATEI- und Zeilennummern ausdrucken kann, wenn AddRef und Release mit Referenzzählern an diesem Punkt aufgerufen werden.

Wenn es eine Möglichkeit gibt, wie ich DATEI und Zeilennummer drucken kann, von wo aus AddRef und Release aufgerufen werden. Eine Möglichkeit ist, dass ich AddRef und Release in abgeleiteten Klassen und prinf FILE- und LINE-Nummern überschreiben kann

//ReferenceCount.h
#include <string>
#include <Windows.h>

using namespace std;
class CReferenceCount
{
public:
   CReferenceCount();
   virtual ~CReferenceCount();
   virtual void AddRef();
   virtual bool Release();


private:
   LONG m_ref;

};


// RefCount.cpp 
//

#include "stdafx.h"
#include "ReferenceCount.h"


CReferenceCount::CReferenceCount():m_ref(0)
{
   AddRef();

}

CReferenceCount::~CReferenceCount()
{
}

void CReferenceCount::AddRef()
{
    InterlockedIncrement(&m_ref);
}

bool CReferenceCount::Release()
{
   if (InterlockedDecrement(&m_ref) == 0)
   {
      delete this;
      return true;
   }

   return false;
}



//ReferenceManager.h
#include <string>
#include <Windows.h>

using namespace std;
class CReferenceCount
{
public:
   CReferenceCount();
   virtual ~CReferenceCount();
   virtual void AddRef();
   virtual bool Release();


private:
   LONG m_ref;

};

//test.cpp
#include "stdafx.h"
#include "ReferenceCount.h"
#include "RefManager.h"
#include <iostream>
using namespace std;

class Test1: public CReferenceCount
{
public:
    Test1(){}
    ~Test1(){}

private :
    int m_i;
};

void main()
{
    Test1 *pTest= new Test1();
    CReferenceManager<Test1> testRef(pTest);

}

Ähnliche Fragen habe ich gepostetFinden, wer ein Objekt über einen intelligenten Zeiger erstellt Entwurfsmuster zum Erkennen von Speicherlecks für intelligente Zeiger mit Referenzzählung

aber keine der Antworten gibt die richtige Erklärung, um dieses Problem anzugehen,

Antworten auf die Frage(8)

Ihre Antwort auf die Frage