我想打印在哪一行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 –