????Java????????????????C++?????????Java?????????????(Gabage Collector)????(?????????????C++???????????????Java??????????????????????????????????)??????C++?ж????洢????????????????Σ?????????????????????????(memory leak)???????????????????????????????????????????????????????
??????????У??????????Java?????????????????????????????????C++??????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????
?????????????????????C++?????????洢????????????????????????????????????????(????????????????????????????????????????????????????????????????????????????)?????????????????洢?????????ú???????????????????в??????κ????????????????????????????????????????????????洢??????????????У????????“δ????(undefined)”??????????????o????????
?????Щ??????????????????????????????????????洢????????????????????????????????洢????????????????????洢??????????????????????C++????????????????C++???????Bjarne Stroustrup???????????????????????????????????????The Design and Evolution of C++??(??????C++????????????)?л??????С??????????????????????Bjarne?????????
????“?????????????C++????????????????????????(???????????????)????????????????????????????飬????????????????????儷???????????????????????????????????????????????У???????????C++???????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????÷???????????????洢??????????????????????????????????к???????????????????????????Ч???????
????????г??????????????????????????????????????????????Щ??????????г????????????????????????????????????????????á?
????????????????????????????????????????????????е?????????????????????????????????????洢??????????????????????????????洢?????????????????????????????????????????ü??????
??????????????????????????????????????????????????????????????????ú??????????????????????C++???????????????????????????????????????”
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ЩЧ????????????????C++???????????????????????????
???????????C++?????????????????????C++?????????????????????????????????????????????????????????????????ж??????С??????????????????????????????????Bjarne???????????????????????????
?????????????????????????????????????????????????????????????????????????????????
??????????????????????
????C++????????????????????????????????????????????Bjarne??????????“?????????????(Resource Inquirment Is Initialization)”??
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????洢??(Free Store???????ν??“??”)?ж???????????????????(?????????????????)??????????????????????????????????????????????delete??????
???????????
?????????????????Щ???C++????????????????????????????????????????????о?????????????????????????????????????????е???????????::std::auto_ptr??
??????????????????????????????????(dereference)?????operator *????????????operator ->????????????????????auto_ptr??????????????The C++ Standard Library??(??????C++?????)??
???????????′???
#include < cstring >
#include < memory >
#include < iostream >
class string
{
public:
string(const char* cstr) { _data=new char [ strlen(cstr)+1 ]; strcpy(_data?? cstr); }
~string() { delete [] _data; }
const char* c_str() const { return _data; }
private:
char* _data;
};
void foo()
{
::std::auto_ptr < string > str ( new string( " hello " ) );
::std::cout << str->c_str() << ::std::endl;
}
????????str????????????????????????????????????????auto_ptr?????????????????????????????????string????(???????????????new?????????????)???????????string???????????????????????????????????檔??string??????????????????????????????????????μ??????????????????????????
???????????????????????????????(?????????????string?У????????????????????????????????????????????????μ???????????????????з??????????????????????????????????????????????????????????????????)???????foo?????з?????????str????????????????C++???????????????????????????????????Ч??
????auto_ptr?????????????????????????????????????????壬?????????????????????????????????????????????????????
????auto_ptr < string > str1( new string( < str1 > ) );
????cout << str1->c_str();
????auto_ptr < string > str2(str1); // str1???????????????????
????cout << str2->c_str();
????cout << str1->c_str(); // δ???壬str1??????????Ч
?????Щ?????????????????????auto_ptr?????????????Щ????????C++???????в???????????????????????????·????