class CScene 
{
public:
bool GenerateData();
CTarget*  m_pTarget;
        int NumofTargets;
}
CScene::CScene()
{
m_pTarget=NULL;
}CScene::~CScene()
{
delete[] m_pTarget;
}bool CScene::GenerateData()
{
  //请问这样修改类成员的大小对吗?会内存泄露吗?如果不对,想更改成员变量指针大小应该怎样做呢,请指点。
   NumofTargets=...;  
   delete[] m_pTarget;
    m_pTarget=new CTarget[NumofTargets];
    return true;
}
这个简单的问题困扰我好久了,请大家赐教!感激!

解决方案 »

  1.   

    CScene::~CScene()
    {
    if (m_pTarget)
    {
    delete[] m_pTarget;
    m_pTarget = NULL;
    }
    }bool CScene::GenerateData()
    {
      //请问这样修改类成员的大小对吗?会内存泄露吗?如果不对,想更改成员变量指针大小应该怎样做呢,请指点。
       NumofTargets=...;  
       if (m_pTarget)
       {
          delete[] m_pTarget;
          m_pTarget = NULL;
       }
        m_pTarget=new CTarget[NumofTargets];
        return true;
    }
      

  2.   

    bool CScene::GenerateData()
    {
      //请问这样修改类成员的大小对吗?会内存泄露吗?如果不对,想更改成员变量指针大小应该怎样做呢,请指点。
       NumofTargets=...;  
       if (m_pTarget)
       {
          delete[] m_pTarget;
          m_pTarget = NULL;
       }
        m_pTarget = new CTarget[NumofTargets];
       if (!m_pTarget)
       {
          return false;
       }
        return true;
    }
      

  3.   

    ---------------------  
    if (m_pTarget)
       {
          delete[] m_pTarget;
          m_pTarget = NULL;
       }
    ---------------------
    不需要这样吧, 如果m_pTarget为空
    delete[] m_pTarget 并没有错
    只有在需要调用m_pTarget对象方法时才需要判断m_pTarget 是否为空,如
    if( m_pTarget )
    {
        m_pTarget->Release();
    }
      

  4.   

    我觉得有可能,GenerateData()中释放m_pTarget后,程序中其它的内存申请,尤其是大量内存申请时,可能会申请到m_pTarget原来所指的内存,而如果此时CScene 类对象发生析构,可能会发生问题。
      

  5.   

    summer54(cofd)。。
    在删除一个指针前应该对该指针进行判断吧,删除一个空指针也比较危险的应该。
      

  6.   

    应该不会,也可以这样写
      m_pTarget = CTarget*realloc(m_pTarget,sizeof(CTarget) * NumofTargets);
      

  7.   

    @ vcmute(横秋) :
    请教一下“一般这么写的,可能会析构两次”是什么意思啊 ?是不是我应该先判断一下是不是指针为空,如果不为空,再delete[],然后赋新的大小?
      

  8.   

    if (m_pTarget)
       {
          delete[] m_pTarget;
    }这种方式不一定可行,又是也会出现错误,比如m_pTarget=0Xccccccccc时就会出错