lijialijialijia 发表于 2019-3-1 19:12:37

关于智能指针的使用

#include<iostream>
#include<string>
#include<memory>//智能指针的头文件

int main()
{
    std::auto_ptr<std::string>pf={ std::auto_ptr<std::string>(new std::string("@@@@@@@")) ,
                                       std::auto_ptr<std::string>(new std::string("#######")) ,
                                       std::auto_ptr<std::string>(new std::string("*************")) ,
                                       std::auto_ptr<std::string>(new std::string("%%%%%%%%%%")) ,
                                       std::auto_ptr<std::string>(new std::string("$$$$"))   };
    std::shared_ptr<std::string>pw;

    pw=pf;

    std::cout<<"The nominees for best avian baseball fp are\n";

    for(int i=0; i<5; i++)
    {
      std::cout<<*pf<<"\n";
    }

    std::cout<<"The winnwr is: "<<*pw<<"\n";

    std::cin.get();

    return 0;
}


照着书上打的代码,为什么会报错

|In function 'int main()':|
|15|error: cannot bind 'std::auto_ptr<std::basic_string<char> >' lvalue to 'std::auto_ptr<std::basic_string<char> >&&'|
|282|error:   initializing argument 1 of 'std::shared_ptr<_Tp>& std::shared_ptr<_Tp>::operator=(std::auto_ptr<_Tp1>&&) '|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

行客 发表于 2019-3-4 08:19:46

你确定照着书弄的?拍张书的图上来

行客 发表于 2019-3-4 17:28:42

本帖最后由 行客 于 2019-3-6 10:37 编辑

本帖莫名其妙需要审核才通过,清除重复内容

行客 发表于 2019-3-4 17:56:47

指针转换有问题,请注意注释:

#include<iostream>
#include<string>
#include<memory>//智能指针的头文件

int main()
{
    std::auto_ptr<std::string>pf={ std::auto_ptr<std::string>(new std::string("@@@@@@@")) ,
                                       std::auto_ptr<std::string>(new std::string("#######")) ,
                                       std::auto_ptr<std::string>(new std::string("*************")) ,
                                       std::auto_ptr<std::string>(new std::string("%%%%%%%%%%")) ,
                                       std::auto_ptr<std::string>(new std::string("$"))   };
        std::shared_ptr<std::string> pw(pf.get());        //将pf转换为普通指针后,赋值给pw

    //pw = pf;

    std::cout<<"The nominees for best avian baseball fp are\n";

    for(int i=0; i<5; i++)
    {
      std::cout<<*pf<<"\n";
    }

    std::cout<<"The winnwr is: "<<*pw<<"\n";

    std::cin.get();

    return 0;
}
页: [1]
查看完整版本: 关于智能指针的使用