📄 subject_65323.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> 看看我这段代码,我在 main 里显式的调用了 a.~A() <BR> 然后它自动调用了它的成员B m_member 的析构函数,<BR> 但我后面又调用了它的另一个成员函数,证明 a 还没被析构,<BR> 所以我理解是,显式调用析构函数就和别的函数一样,没有真正析构的作用,<BR> 只是它会自动调用其成员数据的析构函数,但也没有真正析构它的成员数据,<BR> 我这样理解对吗?<BR>*/<BR>#include <iostream><BR>using namespace std;<BR><BR>class B<BR>{<BR>public:<BR> B() { cout << "construct B" << endl; }<BR> ~B() { cout << "distruct B" << endl; }<BR>};<BR><BR>class A<BR>{<BR>public:<BR> A(char cID) : id(cID) { cout << "construct A of " << id << endl; }<BR> ~A() { cout << "distruct A of " << id << endl; }<BR> void f() { cout << "class A of " << id << endl; }<BR> void g(char newID) { id = newID; }<BR>private:<BR> char id;<BR> B m_member;<BR>};<BR><BR>int main()<BR>{<BR> A a('a');<BR> a.f();<BR> cout << endl << "calling class A 's ~A()" << endl;<BR> a.~A();<BR> cout << endl << "ok" << endl;<BR> a.g('b');<BR> a.f();<BR> <BR> cout << endl;<BR> 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>内容:<BLOCKQUOTE>引用“第2楼”所言<BR><Q>通常不应该在代码中显示调用析构函数,析构函数在对象生命期结束时就被自动调用。 如果在构造函数中使用了new动态分配内存的话,在析构函数中就要使用delete来释放内存。也就是说,调用析构函数以后,对象以及对象元素所占用的内存将完全被释放。如果没有动态分配内存的话,析构函数就不是必需的了。</Q></BLOCKQUOTE><BR><BR>我同意<BR><BR>#include <iostream><BR>using namespace std;<BR><BR>class B<BR>{<BR>public:<BR> B() <BR> {<BR> ca = new char('a');<BR> cout << "construct B" << endl;<BR> }<BR> ~B() <BR> { <BR> cout << "distruct B" << endl; <BR> delete ca;<BR> }<BR>private:<BR> char *ca;<BR>};<BR><BR>int main()<BR>{<BR> B b;<BR> //b.~B(); //加上这句就出错,说明你的显示析构是“画蛇添足”的,程序不管你是否显示析构他还是要自动调用的<BR><BR> 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 + -