释放只有声明没有定义的对象,都是耍流氓

defs.h 文件

class CFtBreakInfo;
struct struc_file_status
{
    HANDLE m_hFile; 
    CFtBreakInfo *m_pBreakInfo; //在程序的其他的地方new出内存

    struc_file_status(void)
    {
        m_hFile = INVALID_HANDLE_VALUE;
        m_pBreakInfo = NULL;
    };

    ~struc_file_status()
    {
        /*
        这里没法做到真正内存释放,即不会调用CFtBreakInfo的析构函数
        解决方案,如下
        */
        if (m_pBreakInfo)
            delete m_pBreakInfo;
        m_pBreakInfo = NULL;
    }

};

解决方案:
增加defs.cpp
#include "FtBreakInfo.h"    /*将CFtBreakInfo结构的头文件包含进来,让delete有迹可寻*/

struc_file_status::~struc_file_status()
{
    /*
    这样不会有内存泄漏了
    */
    if (m_pBreakInfo)
        delete m_pBreakInfo;
       m_pBreakInfo = NULL;
}

总结:

释放只有声明没有定义的对象,都是耍流氓!!!!

关于imcomplete type的说明:

http://msdn.microsoft.com/en-us/library/200xfxh6.aspx

你可能感兴趣的:(delete,new,imcomplete)