c++中关于动态内存分配的new的有关问题

c++中关于动态内存分配的new的问题
我想知道在用new动态分配内存成功的情况要,在释放时必须要用delete吗? 分配的动态分配的内存会不会像普通的变量一样有作用域,然后自动释放??


------解决方案--------------------
必须用delete释放,不会自动释放的
------解决方案--------------------
不会自动释放,不过主函数里的内存分配可以不释放(只要不是循环分配),因为主函数一结束系统直接回收,QT的教材上都这样干,弄得我很郁闷
------解决方案--------------------
其实有办法用malloc释放,只要你知道new和new[]的内存模型,只是这样就不会调用对象的析构函数,所以手动的方法是用malloc等分配内存,然后布局new创建对象,完了手动析构函数,然后free内存
------解决方案--------------------
使用智能指针包封分配new的内存,这样,在作用域结束的时候,分配的堆内存就自动释放了,如:
C/C++ code

void func()
{
    auto_ptr<int> pInt = new int(5) ;
    cout << "local value : " << *pInt << endl ;
}

------解决方案--------------------
你要用LevelInfo的嘛,假如你现在就delete的话就白白push_back了。
------解决方案--------------------
main函数不用释放,但是最好释放了,养成一个好习惯,其他函数要写delete释放的
------解决方案--------------------
探讨
我push完以后delete呢?

------解决方案--------------------
原则上是只能用delete释放的,而且没有所谓的作用域问题,就是说,你把指针传给一个函数,这个函数照样可以释放内存
------解决方案--------------------
new 是堆内存
------解决方案--------------------
进程一结束,所有申请的内存空间都被释放了。
------解决方案--------------------
问高手一个问题:
我用过一个加密算法库,crypto++
他给出的例子有类似这样的语句
fn(new ClassA));
经过测试,这样并没有出现内存泄漏,这是为什么?
是 C++ 本身对这样的用法有定义,还是这个类非常特别,本来就没有申请内存?
------解决方案--------------------
不会,这是个基本问题

另外一点记住如果分配的是动态数组,记得释放的时候用delete[]
------解决方案--------------------
C/C++ code

for(int _iCounter = 0;_iCounter < _nRow - 1;++_iCounter)
{
LevelInfo *Info = new LevelInfo;
fileIn >> Info->m_Level;
fileIn >> Info->m_TemplateId;
fileIn >> Info->m_LevelName;

m_LevelInfoList.push_back(pMyHomeLevelInfo);
}
}
fileIn.close();

------解决方案--------------------
c/c++用内存自己管理,用new操作必须有对应的delete操作,否则会有内存泄露。
在delete操作后,如果再用这个内存块,会导致堆栈错误,程序崩溃。
------解决方案--------------------
不会,不删除就内存泄露
------解决方案--------------------
不释放会很危险的,不过.NET框架可以自动释放。
------解决方案--------------------
必须用delete释放,否则内存泄露!
------解决方案--------------------
有delete删除
------解决方案--------------------
new出来的没有进行delete的问题,关键在于你想要该new出来的内存空间保留多久
1.如果只是临时用,用完后必须的马上delete,否则长期运行,而过循环这个操作,会造成内存慢慢的消耗光,就是所谓的内存泄露

2.有时为了特殊需要,函数内部进行的new并没有delete是因为我们想new出来的内存不需要马上释放,以后还会用到这段内存里面的内容
比如:最寻常的链表创建就是一个例子,创建一个链结点后不会用new,但不delete,直到进行删除某个连节点或者释放整个链表时才会有delete操作

new 出来的空间没见到明显的delete,关键在于你以后是否需要这段内存