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

📄 subject_65323.htm

📁 vc
💻 HTM
字号:
<p>
序号:65323 发表者:ct57 发表日期:2003-12-16 23:16:18
<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>
回复者:零点程序员 回复日期:2003-12-16 23:28:05
<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>
回复者:Cxt_ann 回复日期:2003-12-16 23:45:04
<br>内容:通常不应该在代码中显示调用析构函数,析构函数在对象生命期结束时就被自动调用。<BR><BR>如果在构造函数中使用了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>
回复者:ct57 回复日期:2003-12-17 10:04:26
<br>内容:/*<BR>&nbsp;&nbsp;看看我这段代码,我在 main 里显式的调用了 a.~A() <BR>&nbsp;&nbsp;然后它自动调用了它的成员B m_member 的析构函数,<BR>&nbsp;&nbsp;但我后面又调用了它的另一个成员函数,证明 a 还没被析构,<BR>&nbsp;&nbsp;所以我理解是,显式调用析构函数就和别的函数一样,没有真正析构的作用,<BR>&nbsp;&nbsp;只是它会自动调用其成员数据的析构函数,但也没有真正析构它的成员数据,<BR>&nbsp;&nbsp;我这样理解对吗?<BR>*/<BR>#include &lt;iostream&gt;<BR>using namespace std;<BR><BR>class B<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;B() { cout &lt;&lt; &#34;construct B&#34; &lt;&lt; endl; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;~B() { cout &lt;&lt; &#34;distruct B&#34; &lt;&lt; endl; }<BR>};<BR><BR>class A<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;A(char cID) : id(cID)&nbsp;&nbsp;{ cout &lt;&lt; &#34;construct A of &#34; &lt;&lt; id &lt;&lt; endl; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;~A() { cout &lt;&lt; &#34;distruct A of &#34; &lt;&lt; id &lt;&lt; endl; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;void f() { cout &lt;&lt; &#34;class A of &#34; &lt;&lt; id &lt;&lt; endl; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;void g(char newID) { id = newID; }<BR>private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;char id;<BR>&nbsp;&nbsp;&nbsp;&nbsp;B m_member;<BR>};<BR><BR>int main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;A a('a');<BR>&nbsp;&nbsp;&nbsp;&nbsp;a.f();<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl &lt;&lt; &#34;calling class A 's ~A()&#34; &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;a.~A();<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl &lt;&lt; &#34;ok&#34; &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;a.g('b');<BR>&nbsp;&nbsp;&nbsp;&nbsp;a.f();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<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>
回复者:ct57 回复日期:2003-12-17 10:07:01
<br>内容:上面程序我在 xp + vc7 下调试通过, 运行结果:<BR>construct B<BR>construct A of a<BR>class A of a<BR><BR>calling class A 's ~A()<BR>distruct A of a<BR>distruct B<BR><BR>ok<BR>class A of b<BR><BR>distruct A of b<BR>distruct B<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>
回复者:ct57 回复日期:2003-12-19 09:24:35
<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-12-19 10:36:37
<br>内容:&lt;BLOCKQUOTE&gt;引用“第2楼”所言<BR>&lt;Q&gt;通常不应该在代码中显示调用析构函数,析构函数在对象生命期结束时就被自动调用。&nbsp;&nbsp;&nbsp;&nbsp;如果在构造函数中使用了new动态分配内存的话,在析构函数中就要使用delete来释放内存。也就是说,调用析构函数以后,对象以及对象元素所占用的内存将完全被释放。如果没有动态分配内存的话,析构函数就不是必需的了。&lt;/Q&gt;&lt;/BLOCKQUOTE&gt;<BR><BR>我同意<BR><BR>#include &lt;iostream&gt;<BR>using namespace std;<BR><BR>class B<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;B() <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ca = new char('a');<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;construct B&#34; &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;~B() <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;distruct B&#34; &lt;&lt; endl; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete ca;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;char *ca;<BR>};<BR><BR>int main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;B b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//b.~B(); //加上这句就出错,说明你的显示析构是“画蛇添足”的,程序不管你是否显示析构他还是要自动调用的<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<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 + -