que estoy tratando de imprimir en el que AddRef línea y la liberación es called.Here es el códigopérdida de memoria en referencia contó objetos
En código de abajo he creado en la clase ReferenceCount cuya principal funcionalidad para aumentar y disminuir el recuento refernce. La clase Referencemanager realiza un seguimiento del recuento de referencias y elimina el objeto una vez que alcanza 0.
Test1 es la clase de prueba. En main, estoy creando el puntero Test1 y lo ajuste con la clase CReferenceManager. Ahora, durante la creación de la clase CReferenceManager, se llama a AddRef y mientras se llamará a Release de destrucción.
Si hay una pérdida de memoria, sería más fácil detectar si puedo imprimir números FILE y LINE cuando AddRef y Release se llaman con recuentos de referencia en ese punto.
Si hay una forma de que pueda imprimir el número de ARCHIVO y LÍNEA desde donde se llama AddRef y Release. Una forma es que puedo sobrescribir AddRef y liberación de las clases derivadas y archivo y linea números prinf
preguntas//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);
}
Similare He publicado finding who creates object via smart pointer Design pattern to detect memory leaks for reference counted smart pointers
pero no de las respuestas dar explicación correcta de abordar este proble,
'eliminar esto;' OMG !!! –
¿Utiliza el puntero inteligente para llamar a AddRef/Release o los llama manualmente? Si los llamas manualmente, recomiendo encarecidamente no hacerlo. –
una plantilla sería una mejor solución; la plantilla se puede hacer para que se ajuste a cada objeto, al igual que una std :: shared_ptr –