有谁知道百度少说怎么进不去了吗?显示不出来是什么情况呢,求解决,

本帖子已过去太久远了,不再提供回复功能。2005年2月 C/C++大版内专家分月排行榜第三
2004年3月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。问一个有关std::string和内存泄漏的问题_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:272,332贴子:
问一个有关std::string和内存泄漏的问题收藏
如下代码:string b("xxx");a = b + "aaa";执行完后a应该是"xxxaaa"。我仔细想了一下觉得很奇怪,如果string::operator +(char*)中创建了一个string的话,这个string没有被delete掉,岂不是会造成内存泄漏吗?由此我提出两个猜想:1. 编译器在处理操作符重载中创建的对象时,会自动添加相应的回收指令。2. string::operator +(char* rhs)返回的不是string&,而是一个类似于临时string的类型的引用,姑且叫它tempstring好了,即tempstring& string::operator +(char* rhs)。然后string& string::operator =(tempstring& rhs)会在返回前把rhs delete掉。我刚刚学C++,有很多不懂的地方,请谅解。
c++海同强大的师资阵容,因人制定课程内容,分阶段学习.c++就到正规IT技术培训机构-海同科技,培训IT技术面对面教学,免费重读!
其实我是想自己做一个string类出来……虽然功能已经实现了,但是有严重的内存泄漏……现在在用tempstring的方法,但是tempstring和string间各种重载和转换真是搞得头晕眼花。。。
很会思考。一般+运行都不会用引用返回,因为这个产生的运行会影响参加运算的“加数”。关于参数及返回参数的确有很多技巧。这个在《C++.Primer.Plus(第五版)》12.1.7复习各种技巧中有详细的解释。太多,你就直接去查阅吧,嘿嘿
临时的string对象出了作用域就自动析构掉了..operator+返回的确实是右值,而不是引用,这是为了和内置+保持一致
谢谢!话说直接返回string不是会加大运算量吗?
不会泄漏,你想想我们在stack中创建变量,你也没有手动去析构吧?同样,对于string来说,这里是创建的临时变量,而这个临时变量会放在堆上么?而临时变量,我们是右值,在C++11前,我们能加引用么?那么你想解决这种拷贝带来的问题,我想你可以考虑使用C++11引入的右值引用与Move语义来消除拷贝产生的临时变量。
string的声明是:typedef basic_string&char&而对于“+”的重载,则是:string operator+ (const string& lhs, const string& rhs);
楼主你是b站的的up主吧?
多谢!问题解决了。我承认我被.net整得丧心病狂了……也许一段时间内我是狗改不了吃屎。。。上图手滑不小心在后面打了个~话说刚才改了半天都提示内存分配出错,后来发现是因为我的字符串数据是放在堆上的。临时产生的string在析构时会把baseptr释放掉,易造成二次释放同一地址。解决方法是给string加了一个复制构造函数,这样不回有重复的baseptr出现,可以安全释放。运行效果:原谅我这个给Ubuntu装win8主题的怪人吧。。。我的确中微软毒太深了。。。
不需要C++11的右值引用。本来标准就允许编译器做 RVO
c++?就业后薪资多少?上市公司&达内&,独家TTS8.0教学系统,c++?达内专家指出;高薪就业始于上市公司,0基础也可入学!
看到楼主这么勇敢地做视频,我也想搞个视频出来
string& string::operator+=(const string& rhs){if(buffer_size_ & length_ + rhs.length_){buffer_size_ = (length_ + rhs.length_) * 3 / 2;delete data_;data_ = new char[ buffer_size_];}std::copy(rhs.data_, rhs.data_ + rhs.length_, data_ + length); return *this;}string operator+(const string& lhs, const string& rhs) //注意这个不是成员函数{
string temp(lhs);
return temp +=}
这个临时的string的作用域只有重载运算符那一小块
我把+=拆散了,+保持不变。如下:
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或2014年1月 荣获微软MVP称号2012年1月 荣获微软MVP称号
2010年11月 挨踢职涯大版内专家分月排行榜第一2010年10月 挨踢职涯大版内专家分月排行榜第一
2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。std::string的substr越界问题 - 博客频道 - CSDN.NET
风扶月归人
只为遇见最好的自己
今天程序中出现程序奔溃,具体如下。
调试发现std::string中的substr(nbeg,nlen);参数nbeg大于string总长度,所以导致中断。所以在substr调用前,增加nbeg与总长度的判断。
参考资料:&
1.&.cn/s/blog_700a65cc0100mib6.html
C++ string的substr是一个很好用的函数,比如下面一个字符串
&&&&&string
s = &abc http://defg.hij/kl.html--mno&;
&&&&&&可以用下面代码提取出http到html中间的部分:
&&&&&&size_t
pos1, pos2;
&&&&&&pos1
= s.find(&http&);
&&&&&&pos2
= s.find(&html&);
&&&&&&string
sub = s.substr(pos1, pos2 - pos1 + 4);
&&&&&&不过一定要注意的是,如果s中不存在http或者html,对substr的调用就会产生一个异常。如果不能及时捕获这个异常并进行处理的话,那么程序的非正常退出是可以预期的。
&&&&&&或者可以这样写:
&&&&&&string
&&&&&&size_t
pos1, pos2;
&&&&&&pos1
= s.find(&http&);
&&&&&&pos2
= s.find(&html&);
&&&&&&if(pos1
!= string::npos && pos2 != string::npos && pos2 & pos1)
&&&&&&&&&&&&&&sub
= s.substr(pos1, pos2 - pos1 + 4);
排名:千里之外
(16)(1)(1)(1)(4)(1)(1)(1)(0)(3)(1)(1)

我要回帖

更多关于 有谁知道去眼袋的价格 的文章

 

随机推荐