智能指针小例子

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;
};
int main(){
    unique_ptr<Test> p(new Test("123"));
    cout<<"done !\n";
    return 0;
}
Test creat
done !
Test delete:123
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
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 !
上一篇 下一篇

猜你喜欢

热点阅读