当前位置: 代码迷 >> QT开发 >> 问个比较基础的C++的NEW的有关问题
  详细解决方案

问个比较基础的C++的NEW的有关问题

热度:23   发布时间:2016-04-25 03:17:56.0
问个比较基础的C++的NEW的问题
class Base {
   Base() {}
   void Func();
   QString *message;
}

void Base::Func()
{
   message = new QString;
}
 


新建Base类的对象后 ,一直都不释放这个对象的情况下   

调用多次Func()  

问题是
1、每次调用Func()都为message申请新的内存吗?还是申请同样段的内存每次都把原来的覆盖掉?
2、这些申请的内存如果不使用delete的话,会随着Base对象被系统自动析构掉吗


------解决方案--------------------
每次都会申请。
可以在fun()加个断点,
调试的时候会发现 每次给message赋值的时候,右键变量-》内存编辑器-》变量地址都会变
------解决方案--------------------
应用程序有个内存堆,new的时候就去拿一块内存,delete的时候就把内存放回去。 要是多次调用Func(),就只会去拿,上次拿到的没有放回去且不能再使用,就会造成内存泄漏,即应用程序的内存堆越来越少。所以某块内存确定不会再使用时,都应该delete和赋空。要在析构里面释放,应该自己定义析构函数。
另外,string已经封装得很高层了,一般情况说来是不需要使用指针的。(不用指针的话,析构时会自动释放)
  相关解决方案