我想打印在哪一行AddRef和Release是called.Here是代码检测内存泄漏计算对象
在下面的代码我已经在ReferenceCount类,其主要功能,以增加和减少refernce计数创建。 Referencemanager类跟踪引用计数,并在对象达到0时删除对象。
Test1是测试类。主要我创建Test1指针并用CReferenceManager类包装它。现在在创建CReferenceManager类的过程中,AddRef被调用,而销毁Release将被调用。
如果存在内存泄漏,那么当AddRef和Release在该点引用计数时可以打印出FILE和LINE数字将更容易检测。
如果有方法可以打印AddRef和Release被调用的FILE和LINE号码。一种方法是,我可以覆盖AddRef和在派生类和prinf文件和行号
//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问题放开我已经发布 finding who creates object via smart pointer Design pattern to detect memory leaks for reference counted smart pointers
但非的答案给解决这个正确的解释有问题,
'删除此;'OMG !!! –
你使用智能指针调用AddRef/Release还是你手动调用它们?如果你手动给他们打电话,我强烈反对这个建议。 –
模板将是更好的解决方案;可以使模板适合每个对象,就像一个std :: shared_ptr –