⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_51103.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:51103 发表者:James 发表日期:2003-08-29 08:54:45
<br>主题:关于new和delete?
<br>内容:是不是用了new的地方就一定要用delete呢????<BR><BR>比如在一个对话框类里引用一个控件:<BR>CComboBox *pb=(CComboBox *)GetDlgItem(ID_AA);<BR>......<BR>是不是用完了,这时就要使用 delete pb 呢?<BR>可这样会将该控件析构掉,而控件却应还在对话框中啊!<BR>不调用 delete db 就会留下内存漏洞吗?<BR><BR>再看以下程序段,动态创建对话框,然后做各种关于该对话框的操作,<BR>最后是不是要使用 delete 语句呢?如果调用了则会把窗口析构掉,窗口一闪就没了!<BR>所做的操作也不可见了,如果要窗口一直可见就不能调用delete语句;此外程序运行到该代码段结束的时候,该指针变量也就自动撤销了,如果不调用delete语句,窗口一直还在,但是不是就留下了内存漏洞呢?这该如何解决呢?真的不好理解哦!<BR>{<BR>&nbsp;&nbsp;ParamDlg *pdlg=new CParamDlg;<BR>&nbsp;&nbsp;pdlg-&gt;Create(IDD_PARAMDIALOG,NULL);<BR>&nbsp;&nbsp;pdlg-&gt;ShowWindow(SW_SHOW);<BR>&nbsp;&nbsp;.........<BR>&nbsp;&nbsp;//delete pdlg ????&nbsp;&nbsp;<BR>}<BR><BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:iamhere 回复日期:2003-08-29 09:19:22
<br>内容:new是申请内容,delete是释放申请的内存,<BR>如果光有new而没有delete,就会造成内存的泄漏。<BR><BR>对楼主的第一个例子:<BR>CComboBox *pb=(CComboBox *)GetDlgItem(ID_AA);<BR>这里并没有通过new申请内存,而只是取得了一个控件的指针,所以如果后面去用delete是错误的。<BR><BR>第二个例子:<BR>如果后面不调用delete的话,必定会有内存泄漏的。<BR>在本例中,可以有两种方法:<BR>1、new之后以DoModal的方式显示对话框(也就是模式对话框),这样知道你退出窗口之后才会执行后面的语句,才会进行delete操作<BR>2、如果一定要用非模式对话框,你们pDlg就不应该是这个函数的局部变量,可以定义为类的成员变量或全局变量,在使用之前new(例如初始化时),确保使用使用完成之后delete(例如应用程序退出时)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:爱丽思 回复日期:2003-08-29 10:26:03
<br>内容:modeless对话框一般都是成员变量的,不是局部变量
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:pansm 回复日期:2003-08-29 11:23:34
<br>内容:同意楼上的观点
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:James 回复日期:2003-08-30 17:17:23
<br>内容:在用delete撤销不是由new分配的内存时,常常会出现意想不到的错误!<BR>第一个例子就是这样的,其实可以不用管它就好!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -