C++????????????
???????????? ???????[ 2015/1/28 14:08:27 ] ????????C++ .NET ????
????4. unique_ptr???????auto_ptr??
?????????????????????????????unique_ptr???????auto_ptr??????????????????????????????
??????????????:
????auto_ptr<string> p1(new string ("auto") ?? //#1
????auto_ptr<string> p2; //#2
????p2 = p1; //#3
?????????#3?У?p2???string????????????p1?????????????????????????????£?????p1??p2???????????????—??????
??????????????????????p1??????????£????p1?????????Ч???????
???????????????unique_ptr???????
????unique_ptr<string> p3 (new string ("auto"); //#4
????unique_ptr<string> p4?? //#5
????p4 = p3; //#6
????????????????#6???????????p3?????????Ч?????????????unique_ptr??auto_ptr???????
??????unique_ptr???и???????????
??????????????????????????????????????Σ???????????????????o??????壺
????unique_ptr<string> demo(const char * s)
????{
????unique_ptr<string> temp (new string (s))??
????return temp??
????}
???????????д?????′???
????unique_ptr<string> ps;
????ps = demo('Uniquely special")??
????demo()??????????unique_ptr?????ps?????????鷵???unique_ptr???е???????????????? unique_ptr ?????????????л?????? unique_ptr ????????Ч??????????仰????????????????????κ??????????????????????????????????????????????????????????unique_ptr????????????
??????????????????????? unique_ptr ????????????????? unique_ptr ???????????????????????????????? unique_ptr ?????????????????????????????????磺
????unique_ptr<string> pu1(new string ("hello world"));
????unique_ptr<string> pu2;
????pu2 = pu1; // #1 not allowed
????unique_ptr<string> pu3;
????pu3 = unique_ptr<string>(new string ("You")); // #2 allowed
????????#1?????????unique_ptr(pu1)??????????Σ??????#2?????????????unique_ptr??????????? unique_ptr ??????????ù?????????????????????????????? pu3 ???????????????????????????????unique_ptr ????????????????auto_ptr ??
????????????????????????????#1????????????????????????????????????????????????????????????????????????????????????????????????C++????????????std::move()??????????????unique_ptr??????????????????????????demo()????????????ú??????????unique_ptr<string>????
???????move??????????????????????????????????????????
????unique_ptr<string> ps1?? ps2;
????ps1 = demo("hello");
????ps2 = move(ps1);
????ps1 = demo("alexia");
????cout << *ps2 << *ps1 << endl;
????5. ?????????????
???????????????????????????????????????????????????У???????????????????
??????????????????????
??????1??????????????????????????????????shared_ptr?????????????????
???????????????飬??????Щ?????????????????????????????С??????
?????????????????????????????????
????STL??????????????STL?????????????????????Щ??????????shared_ptr????????????unique_ptr????????????warning????auto_ptr??????????????????????????????shared_ptr???????Boost??????shared_ptr??
??????2????????????????????????????????????unique_ptr????????????new??????棬????????????????????????????????unique_ptr??????????????????????????????????unique_ptr????????????????????delete?????unique_ptr?洢??STL??????????????????y????unique_ptr??????????????????sort()???????磬??????????????????????????Ρ?
unique_ptr<int> make_int(int n)
{
return unique_ptr<int>(new int(n));
}
void show(unique_ptr<int> &p1)
{
cout << *a << ' ';
}
int main()
{
...
vector<unique_ptr<int> > vp(size);
for(int i = 0; i < vp.size(); i++)
vp[i] = make_int(rand() % 1000); // copy temporary unique_ptr
vp.push_back(make_int(rand() % 1000)); // ok because arg is temporary
for_each(vp.begin()?? vp.end()?? show); // use for_each()
...
}
????????push_back??????????????????????????unique_ptr????unique_ptr??????vp?е????unique_ptr????????????????????????show()???????for_each()??????????????????????????vp??????unique_ptr?????pi?????????????????????????????????????????unique_ptr???????
??????unique_ptr???????????丳??shared_ptr?????????unique_ptr?????????????????????????????????????????????У?make_int()??????????unique_ptr<int>??
????unique_ptr<int> pup(make_int(rand() % 1000)); // ok
????shared_ptr<int> spp(pup); // not allowed?? pup as lvalue
????shared_ptr<int> spr(make_int(rand() % 1000)); // ok
???????shared_ptr????????????????????????????unique_ptr????shared_ptr??shared_ptr??????????unique_ptr???е????
??????????unique_ptr?????????????????auto_ptr????unique_ptr???????????????????????unique_ptr??????????Boost??????scoped_ptr??????unique_ptr?????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11