给局部静态指针变量分配内存储器时,最后不执行delete的话,会有什么后果
给局部静态指针变量分配内存时,最后不执行delete的话,会有什么后果?[解决办法]内存泄露,最后报虚拟内存不
给局部静态指针变量分配内存时,最后不执行delete的话,会有什么后果?
[解决办法]内存泄露,最后报虚拟内存不足。
[解决办法]Hey Loaden, s_T is static, it only get newed once, how can it leak so many memory at all?
[解决办法]这个地方是一个单件模式
即使在栈的内部没有释放
但只要在其他地方仍可以引用T* T::getPoint()
就还是有机会可以释放的
比如
void foo()
{
T* pT = T::getPoint(); //引用的void?functionName的T* pT是同一个对象,可以fprintf %p查看地址
//operation
T::release();
}
为了设计上的一致,建议T提供一个releasePoint()的对应方法,保证new 和 delete , new [] 和 delete [] 或者malloc和free对应
[解决办法]这里看你的示范例子
T* pT = T::getPoint();
明显这里getPoint是一个类方法,而非对象的方法,因此可以全局都引用同样一个内存对象
[解决办法]getPoint函数中的指针s_T是一个静态变量,在函数执行结束之后仍然一直存在,且生命周期是整个程序段。你可以在后面的很多时机去释放掉这个指针,可以delete pT来释放掉,如果不释放就是泄露
[解决办法]你是要做单件吧?全局静态不行吗?初始化的时候Create一下,失败就别继续了,这么写蛋疼
[解决办法]!s_T->Create();是判断什么呢?
貌似要用到单件模式吧,单件只有一个对象所以即使内存泄露也没什么大问题一般。
设计单例类的释放应该定义一个计数变量。调用一次构造函数计数加1,然后设计一个释放内存的函数
根据计数来判断是否已经释放,程序中主动调用释放。