LPSTR CXXX::GetPtr()----------------------------1
{
int iLen=CalcuLength();
static LPSTR ptr=new char[iLen];
return ptr;
}这样的东东,调用GetPtr后,这个ptr指向的内存什么时候被销毁?static LPSTR CXXX::GetPtr()------------------------------2
{
int iLen=CalcuLength();
static LPSTR ptr=new char[iLen];
return ptr;
}
这样呢?LPSTR CXXX::GetPtr()-----------------------------------3
{
static LPSTR sz[MAX_PATH];
return sz;
}

static LPSTR CXXX::GetPtr()----------------------------4
{
static LPSTR sz[MAX_PATH];
return sz;
}
又如何?

解决方案 »

  1.   

    12只有在你明确delete ptr的时候才销毁
    34因为在sz全局变量区,所以只有当程序退出的时候才销毁
      

  2.   

    记住new 了以后销毁需要自己来delete,
    3,4在当程序退出就会销毁.
      

  3.   

    1,2 分配在堆上,需要delete删除
    3,4 全局数据区,程序退出时系统销毁
      

  4.   

    对于1,2,是不是每调用一次GetPtr就会在堆上分配一块内存?如果是,那static有什么作用?和
    LPSTR CXXX::GetPtr()----------------------------
    {
    int iLen=CalcuLength();
    LPSTR ptr=new char[iLen];
    return ptr;
    }
    相比,有什么区别?