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

percepto 2014-05-22 09:26:02
class Base {
Base() {}
void Func();
QString *message;
}

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


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

调用多次Func()

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

...全文
318 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
top_worker 2014-06-20
  • 打赏
  • 举报
回复
引用 7 楼 huanqianhappy 的回复:
应用程序有个内存堆,new的时候就去拿一块内存,delete的时候就把内存放回去。 要是多次调用Func(),就只会去拿,上次拿到的没有放回去且不能再使用,就会造成内存泄漏,即应用程序的内存堆越来越少。所以某块内存确定不会再使用时,都应该delete和赋空。要在析构里面释放,应该自己定义析构函数。 另外,string已经封装得很高层了,一般情况说来是不需要使用指针的。(不用指针的话,析构时会自动释放)
很受教,谢谢!
huanqianhappy 2014-06-05
  • 打赏
  • 举报
回复
应用程序有个内存堆,new的时候就去拿一块内存,delete的时候就把内存放回去。 要是多次调用Func(),就只会去拿,上次拿到的没有放回去且不能再使用,就会造成内存泄漏,即应用程序的内存堆越来越少。所以某块内存确定不会再使用时,都应该delete和赋空。要在析构里面释放,应该自己定义析构函数。 另外,string已经封装得很高层了,一般情况说来是不需要使用指针的。(不用指针的话,析构时会自动释放)
killerls 2014-06-05
  • 打赏
  • 举报
回复
每次调用func,都制造了一个野指针(如果你没有在Base外部对之前的指针进行保存的话)然后申请了一个新内存。
bingcaihuang 2014-05-29
  • 打赏
  • 举报
回复
每次申请一块内存,原来的就被抛弃掉了,但没有释放
KeequenLiu 2014-05-23
  • 打赏
  • 举报
回复
方法可以修改为: if(message) { delete message message=NULL } message = new QString; 但是记得在构造函数中增加message=NULL。
山伟 2014-05-23
  • 打赏
  • 举报
回复
每次new出来的都是新的,必须手动delete和赋空。 只有程序结束的时候才会随着AP的销毁而释放。
sdu_hanson 2014-05-22
  • 打赏
  • 举报
回复
每次都会申请。 可以在fun()加个断点, 调试的时候会发现 每次给message赋值的时候,右键变量-》内存编辑器-》变量地址都会变
dbzhang800 2014-05-22
  • 打赏
  • 举报
回复
每次都申请,不会自动释放,你必须手动delete

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧