码迷,mamicode.com
首页 > 编程语言 > 详细

C++11 智能指针

时间:2020-04-30 19:37:12      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:错误   ptr   计数   赋值运算符   ted   出错   detail   独立   运算符   

 

https://blog.csdn.net/flowing_wind/article/details/81301001

 

https://www.cnblogs.com/wuyepeng/p/9741241.html

 

 

shared_ptr:

  不能用对象指针独立的初始化两个智能指针

  例子:

class TestSP{
public:
    TestSP(string s):str(s) {
        cout<<"TestSP created\n";
    }
    ~TestSP() {
        cout<<"TestSP deleted:"<<str<<endl;
    }
    const string& getStr() {
        return str;
    }
    void setStr(string s) {
        str = s;
    }
    void print(){
        cout<<str<<endl;
    }
private:
    string str;
};

  使用:

TestSP *dx = new TestSP("123");

shared_ptr<TestSP> p3(dx);
shared_ptr<TestSP> p4(dx);
//或者
shared_ptr<TestSP> p5(p3.get());

  这样做,每个智能指针内部计数其实都是1,在p3结束或手动reset后,该对象内存回收了,p4和p5里面的普通指针都变成了悬空指针,然后p4和p5结束时,还是回去对已经回收了的内存调用delete,造成错误(编译不出错,运行会出错)

 

  要用多个指针指向同一块内存,后面的智能指针要用前面的来初始化(通过智能指针类的拷贝构造或赋值运算符):

shared_ptr<TestSP> p6(p3);  //这样p3、p6内部计数都是2了

 

C++11 智能指针

标签:错误   ptr   计数   赋值运算符   ted   出错   detail   独立   运算符   

原文地址:https://www.cnblogs.com/taoXiang/p/12810708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!