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

📄 subject_26906.htm

📁 vc
💻 HTM
字号:
<p>
序号:26906 发表者:天花乱坠 发表日期:2003-01-06 16:23:05
<br>主题:何时应该用new???
<br>内容:用它和直接定义有和区别?谢谢<BR><BR>CString sAaa;<BR>sAaa=new CString;<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>
回复者:mm2003 回复日期:2003-01-06 16:30:37
<br>内容:你用错了,只有建立一个对象指针时才可用NEW.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bb 回复日期:2003-01-06 17:01:23
<br>内容:区别在于<BR>动态分配:<BR>CString *psAaa;<BR>psAaa=new CString;<BR>....<BR>delete psAaa; //需要释放内存<BR><BR>直接定义<BR>CString sAaa;<BR>sAaa="123";<BR>....<BR>//不需要释放内存,析构函数自动处理<BR><BR><BR><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>
回复者:晚风也渡 回复日期:2003-01-06 17:07:02
<br>内容:new是指在堆中建立该类对象,而不是在栈中,由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-01-07 09:11:55
<br>内容:谢谢大家的回答。<BR>是否我可以这样理解:只要在程序中用到指针类型的定义,然后我又需要给他赋值,就必须给他new一下(还是跟数据类型有关?),否则就会出错(出错的原因是因为没有分配内存??)。而new产生的内存分配又必须通过delete来释放,否则他就会赖着不撒手:)<BR>另外,何时使用动态分配?这个火候如何掌握?<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>
<font color=red>答案被接受</font><br>回复者:晚风也渡 回复日期:2003-01-07 09:47:33
<br>内容:new是动态的从堆中分配内存<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>
回复者:天花乱坠 回复日期:2003-01-07 14:22:11
<br>内容:还是有点似懂非懂:PP,这个"分配的内存必须增大或减小"是指所有变量的还是指某个变量的,还是指要新建一个变量必须要给他分配内存(事先没有想到?)?如果是后者那是否相当于让那个指针指向某个内存,而不是一个“空”指针。(我有点被转晕了*******:)<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>
回复者:晚风也渡 回复日期:2003-01-07 14:56:00
<br>内容:用new动态分配内存的时候,返回一个指向内存区域起始处的指针。<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>
回复者:Frank001 回复日期:2003-01-07 15:16:00
<br>内容:是不是可以这样理解:<BR>CString *psAaa;<BR>psAaa=new CString;<BR>.....<BR>delete psAaa;<BR>这样动态分配内存,实在程序里运行到这里是,才分配的,运行到delete时释放。<BR>(这样节省内存)<BR>而直接定义,实在程序一开始运行系统就分配程序,直到程序结束才释放,相对来说比较的稳定,但相对的也就浪费内存啦。<BR><BR>C++我也很菜的,呵呵,如有说错,还望各位高手指正哦。<BR><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>
回复者:天花乱坠 回复日期:2003-01-08 10:24:25
<br>内容:frank001,我也像你这样一样理解了,是否就是给内存分配的时间可以错开,保证有充足的内存供调用;还有,对于一些带参数的构造函数再开始时候我们无法知道该赋予什么参数,所以只能在需要用到的时候,再new。<BR><BR>#include &lt;iostream.h&gt;<BR><BR>class Tdate<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;Tdate(int m,int d,int y);<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;int month;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int day;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int year;<BR>};<BR><BR>Tdate::Tdate(int m,int d,int y)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m&gt;0 &amp;&amp; m&lt;13)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;month=m;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(d&gt;1 &amp;&amp; d&lt;32)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;day=d;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(y&gt;0 &amp;&amp; y&lt;3000)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;year=y;<BR>}<BR><BR>void fn(int a,int b,int c)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Tdate* pD;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pD=new Tdate(a,b,c);//如果之前只定义而不new也没有意义,只是一个空指针<BR>//&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; pD-&gt;month &lt;&lt; " " &lt;&lt; pD-&gt;day ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete(pD);<BR>}<BR><BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;fn(1,8,2003);<BR>}<BR><BR>钱能的书上是这样说的:<BR>堆空间相对于其他内存空间比较空闲,随要随拿,给程序运行带来了较大的自由度,使用堆空间往往由于:<BR>&nbsp;&nbsp;&nbsp;&nbsp;1知道运行时才知道需要多少对象空间<BR>&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;不知道对象的生存期到底有多长<BR>&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;知道运行时才知道一个对象需要多少内存空间
<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 + -