博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

执着的小雨

  xiaoyuonline.cublog.cn

关于作者
姓名:小雨
职业:IT
年龄:25
位置:北京(为奥运加油!)
个性介绍:做最好的自己!
|| << >> ||
我的分类


“临时对象”的生命期问题
关键词:临时对象 g++ vs2003
 
发现问题:有一个函数定义如下
void storeContent(string &title, string &text)
{
  //具体实现
}
....
//调用
storeContent(string("plan.txt"),fName);
...
如何程序中有上述实现,在g++下编译会出现问题。
如果将上述调用改为:
...
string title = string("plan.txt");
storeContent(title,fName);
...
错误会消失
但是在vs2003下编译不会出现问题
可能问题原因:string("plan.txt")如何直接用在参数当中,会创建一个临时的对象,但是该临时对象的生命期很短,造成了错误,生命期依赖于编译器的实现,所以会有不同的结果。
string title = string("plan.txt");
会把临时的对象赋值给title对象。
如果使用string title("plan.txt") 只是调用构造函数,会更快一些。

发表于: 2007-05-11,修改于: 2007-09-03 17:26,已浏览798次,有评论5条 推荐 投诉


网友评论
网友: 本站网友 时间:2007-09-28 14:43:34 IP地址:222.64.9.★
强烈的顶顶顶!!! 
 15G空间=5个网站=500元/年 可免费试用 
www.abcnic.com    QQ:1012727
5GB 独立WEB空间、5GB 企业邮箱空间、5GB MSSQL数据库   
IIS连接数据 500 个、500GB/月流量、共享日志文件空间 
数据库功能 
支持5GB MSSQL数据库空间,5个用户数据库、Access 
主机功能支持 
采用安全稳定的Win2003 .net2.0 架构 
支持ASP、PHP、ASP.NET、PERL等脚本、支持自定义CGI 
全面支持.net2.0版本,独立的Application应用池,
支持SSI(Shtml),支持FrontPage扩展 
可免费自行绑定5个域名、500个解析、500个子域名
 企业邮箱功能 
赠送5GB 超大企业邮箱,500个Email企业邮箱用户 
自动回复、自动转发、POP3、SMTP收发信、SMTP发信认证 
邮件过滤、邮件拒收、邮件夹管理、邮件域管理、定制邮件数 

网友: buxoman 时间:2007-10-22 12:54:00 IP地址:219.140.167.★
对这个问题的解释是错误的。请看我博客上的一篇关于const与引用的解析。

网友: xiaoyuonline 时间:2007-10-23 13:39:29 IP地址:202.165.107.★
不知道buxoman是否经过了验证?看了你的博客文章感觉跟我这个没什么关系,那篇文章只是说了一下const和引用是什么?
我这里没有给出原因,只是我的猜测,如果你有什么其他见解,请给出相关验证的结果。谢谢。

网友: fera 时间:2008-01-18 17:23:50 IP地址:202.96.60.★
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"test.d" -MT"test.d" -o"test.o" "../test.cpp"
../test.cpp: In function `int main()':
../test.cpp:27: error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'std::string'
../test.cpp:5: error: in passing argument 1 of `void storeContent(std::string&, std::string&)'
make: *** [test.o] Error 1
将void storeContent(string &title, string &text)改成void storeContent(const string &title, string &text)后,没有问题。
楼主的说法显然是错误的。永远记住,该临时对象虽然声明期很短,但它也是要到该语句执行完之后才会析构。
buxoman的文章说的就是你的这个问题,只不过你没有理解而已。

Blog作者的回复:
    

这个确实是我错了,同意fera的观点,向你学习!


网友: xiaoyuonline 时间:2008-02-13 15:33:05 IP地址:202.165.107.★
这个确实是我错了,同意fera的观点,向你学习!

 发表评论