美文网首页
shared_ptr作为引用引起的错误

shared_ptr作为引用引起的错误

作者: help_youself | 来源:发表于2019-05-21 19:59 被阅读0次
    #include <memory>
    class Test{
    public:
        Test(){
            std::cout<<"ctor"<<std::endl;
        }
        ~Test(){
            std::cout<<"dtor"<<std::endl;
        }
        void Print(const char *fun){
            std::cout<<"print "<<fun<<" "<<i_<<std::endl;
        }
        void Set(int i){
            i_=i;
        }
    private:
        int i_{0};
    };
    void another_test(std::shared_ptr<Test> &t){
        std::shared_ptr<Test> t1=std::move(t);
        t1->Set(10);
        t1->Print(__FUNCTION__);
    }
    std::shared_ptr<Test> Create(){
        std::shared_ptr<Test> t(new Test());
        t->Set(5);
        return t;
    }
    
    int main(){
        std::shared_ptr<Test> t=Create();
        t->Print(__FUNCTION__);
        another_test(t);
        if(t){
            t->Print(__FUNCTION__);
        }
        printf("%d\n",t.use_count());
        return 0;
    }
    
    

     代码中的if中的程序并不会被执行,且打印出的的引用计数为0。

       if(t){
            t->Print(__FUNCTION__);
        }
    printf("%d\n",t.use_count());
    

     这里的错误就是another_test中引用参数造成的问题。改成如下的的,代码就可以正常执行。

    void another_test(std::shared_ptr<Test> t){
        std::shared_ptr<Test> t1=std::move(t);
        t1->Set(10);
        t1->Print(__FUNCTION__);
    }
    

    [1]c++中智能指针Shared_ptr的原理https://www.jianshu.com/p/2331984bcd21

    相关文章

      网友评论

          本文标题:shared_ptr作为引用引起的错误

          本文链接:https://www.haomeiwen.com/subject/vxajzqtx.html