智能指针小例子
2019-04-24 本文已影响0人
cb_guo
智能指针是放在 memory 头文件中的
比如文件名为 test.cpp。则需要 C++11 标准编译
g++ -std=c++11 test.cpp -o aa
-o aa 指定可执行文件为 aa
#include<iostream>
#include<memory>
using namespace std;
class Test{
public:
Test(string s){
str = s;
cout<<"Test creat\n";
}
~Test(){
cout<<"Test delete:"<<str<<endl;
}
string& getStr(){
return str;
}
void setStr(string s){
str = s;
}
void print(){
cout<<str<<endl;
}
private:
string str;
};
- unique_ptr 自动执行析构
int main(){
unique_ptr<Test> p(new Test("123"));
cout<<"done !\n";
return 0;
}
Test creat
done !
Test delete:123
- shared_ptr 两种创建方式
int main(){
shared_ptr<Test> ptest = make_shared<Test>("123");
shared_ptr<Test> ptest2 = make_shared<Test>("456");
cout<<"done !\n";
return 0;
}
Test creat
Test creat
done !
Test delete:456
Test delete:123
int main(){
shared_ptr<Test> ptest(new Test("123"));
shared_ptr<Test> ptest2(new Test("456"));
cout<<"done !\n";
return 0;
}
Test creat
Test creat
done !
Test delete:456
Test delete:123
- shared_ptr 小例子
int main(){
shared_ptr<Test> ptest(new Test("123"));
shared_ptr<Test> ptest2(new Test("456"));
cout<<ptest2->getStr()<<endl;
cout<<ptest2.use_count()<<endl;
ptest = ptest2; //"456"引用次数加1,“123”销毁
ptest->print();
cout<<ptest2.use_count()<<endl; //2
cout<<ptest.use_count()<<endl; //2
ptest.reset();
ptest2.reset(); //此时“456”销毁
cout<<"done !\n";
return 0;
}
Test creat
Test creat
456
1
Test delete:123
456
2
2
Test delete:456
done !