????????
?????????????C++ Primer Plus???????棬??????????飬???й??????????????????????????????????????????C++????????У?????????????????????????????????????????Щ???????shared_ptr?????????????????????????????????????????????????……??????????????C++??????????洦???????????????????????????????????????????????????????ü????
?????????????????????????????????????????????????????Щ?????
??????
????????????????????
????C++????????????
???????????auto_ptr??
????unique_ptr???????auto_ptr??
?????????????????
????????
????1. ????????????????
??????????????????????????
????void remodel(std::string & str)
????{
????std::string * ps = new std::string(str);
????...
????if (weird_thing())
????throw exception();
????str = *ps;
????delete ps;
????return;
????}
???????????????weird_thing()????true????delete????????У????????????й???
??????α????????????????????????????????throw exception();??????delete ps;????????????????????????????????????????????????delete??????????????к?????delete???????к?????????????????????????????????review????????????????????й?????????????????
????????????????remodel??????????????????????????????????????????????????????????????????????????????—??????ps??????潫?????????ps?????????????????????ж?e???
????????????????????????????????ps?????????????????????????????ps???????????????????檔??ps???????????????????????????????????????????????????????????????????????????????????????????????????????檔
?????????? auto_ptr??unique_ptr??shared_ptr?????????????????????????????????????????????????????????????????????壬??????????????????????????????????????дdelete??????????????????
????????????remodel()?????????????3????????У?
????????????memory??????????????????????
?????????string??????滻????string????????????
???????delete???
?????????????auto_ptr???ú?????????
????# include <memory>
????void remodel (std::string & str)
????{
????std::auto_ptr<std::string> ps (new std::string(str))??
????...
????if (weird_thing ())
????throw exception()??
????str = *ps??
????// delete ps?? NO LONGER NEEDED
????return;
????}