computer 版 (精华区)

发信人: remember (Learning C++), 信区: program
标  题: 什么时候会产生临时对象(第四个问题)(完)
发信站: 听涛站 (2001年10月26日11:31:02 星期五), 站内信件

    相信这个问题你是不加思索的回答:既然没有调用析构函数,
这意味着没有生成临时对象,那自然不会调用拷贝构造函数!
    有道理,可惜VC6似乎不大赞同我们的观点:请试试把析构函
数去掉,就是说我们不声明析构函数(显然,在这个类中,析构
的存在是多余的,当没有析构函数的情况下,编译器没有也不需
要自动合成一个析构函数),再看看结果如何?
    很是faint,居然调用了拷贝构造函数!!这意味着一个临时
对象被构造出来了~~~
    灾难啊~~居然在VC6中这样会导致生成一个临时对象!
    而同样的代码在linux的g++中编译并没有生成临时对象而调用
拷贝构造函数~~~
    你们认为哪个更合理?显然是不生成临时对象合理。
    通常的编译器确实不会生成临时对象然后再调用拷贝构造函数
这么傻,但可惜我们最常用的VC6这么干了~~~

    这组文章只是提醒大家小心,是否生成临时对象,一定程度
上取决于我们程序的写法,但一定程度上还取决于编译器~~~

    自然,这样的写法是一定产生临时对象的,能免则免:
    A a; a=A(1);
    若A是我们举例中的小例子还好~~但万一是个庞大的类,那
么带来的将是~~~我实在不敢保证编译器能对你的程序作出什么
优化!

--
    洛阳亲友如相问  一片冰心在玉壶
※ 来源:·听涛站 tingtao.dhs.org·[FROM: 匿名天使的家] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.108毫秒