Обнаружение утечки памяти в подсчитанных объектах
Я пытаюсь напечатать, на какой строке называются addref и release. Вот код
В приведенном ниже коде я создал класс ReferenceCount, основная функциональность которого заключается в увеличении и уменьшении количества ссылок. Класс Referencemanager отслеживает количество ссылок и удаляет объект, как только он достигает 0.
Test1 - это тестовый класс. В основном я создаю указатель Test1 и оборачиваю его классом CReferenceManager. Теперь при создании CReferenceManager вызывается класс AddRef и при уничтожении вызывается Release.
Если есть утечка памяти, тогда было бы легче определить, смогу ли я распечатать числа FILE и LINE, когда AddRef и Release вызвали с подсчетом ссылок в этой точке.
Если есть способ, которым я могу напечатать номер ФАЙЛА и ЛИНИИ, откуда вызывается AddRef и Release. Одним из способов является то, что я могу перезаписать AddRef и Release в производных классах и принтерах FILE и LINE.
//ReferenceCount.h
#include
#include
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
#include
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
using namespace std;
class Test1: public CReferenceCount
{
public:
Test1(){}
~Test1(){}
private :
int m_i;
};
void main()
{
Test1 *pTest= new Test1();
CReferenceManager testRef(pTest);
}
Similare вопросы, которые я отправилнайти, кто создает объект с помощью умного указателя Шаблон проектирования для обнаружения утечек памяти для интеллектуальных указателей с подсчетом ссылок
но ни один из ответов не дает правильного объяснения для решения этой проблемы,