这个类 ctor 正在泄漏内存,我不能说发生了什么。我怎么知道?如果我注释掉第二个 ctor 行,泄漏就会消失。
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)
}
...
可能是简单的东西,但我无能为力..
- 编辑答案 - 正如 PermanentGuest 所说:不。它不会给基本类型带来问题。但是,如果您的类型 T 的 Resource_Descriptor 有一些实现,它通过 memset 在构造函数(例如字符串)中分配内存,您将将该类的任何内部指针重置为 NULL,从而拒绝其析构函数删除内存的机会。– 永久客人
std::string 是问题,解决了。