这堂课正在泄露记忆,我不知道发生了什么。 我怎么知道?如果我注释掉第二条线,泄漏就会消失。
template< class T, int fixedSize >
class Resource_Cache{
private:
ID3D11Device * m_pDeviceRef; // the one that actually can create stuff
UINT m_iCurrentIndex; // next slot to be allocated, also the ID of the resources
//UINT m_nFreedSlots; // how many freed slot there are?
T* m_cache[fixedSize]; // the container per se
struct SlotInfo{
UINT nUseCount;
Resource_Descriptor<T> desc;
} m_slotsInfo[fixedSize];//use a hashtable<desc,index on m_cache>;
Resource_Cache(); //denied default ctor
public:
Resource_Cache( ID3D11Device * pDevice_p ): m_pDeviceRef(pDevice_p), m_iCurrentIndex(0){
memset(m_cache, NULL, fixedSize*sizeof(T*));
memset( m_slotsInfo, 0, fixedSize*sizeof(SlotInfo)); // zero slotsInfo memory(CAUSING LEAKS)
}
...
可能是简单的东西,但我一无所知..
std :: string是问题所解决的。
答案 0 :(得分:1)
而不是
Resource_Cache( ID3D11Device * pDevice_p ): m_pDeviceRef(pDevice_p), m_iCurrentIndex(0){
memset(m_cache, NULL, fixedSize*sizeof(T*));
memset( m_slotsInfo, 0, fixedSize*sizeof(SlotInfo)); // zero slotsInfo memory(CAUSING LEAKS)
}
DO
Resource_Cache( ID3D11Device * pDevice_p )
: m_pDeviceRef( pDevice_p )
, m_iCurrentIndex()
, m_cache()
, m_slotsInfo()
{}
我很确定这个不会治愈你得出的症状是由于内存泄漏,或者内存泄漏(如果有的话),但至少它消除了你可能的原因'通过在(安全)C ++而不是(不安全)C中进行归零来确定。
哦,好吧,因为未说明的未描述的Resource_Descriptor<T>
它可能实际上解决了这个问题。但如果那不是POD,你就不会使用memset
,现在好吗?或者,也许你愿意?