大挪耗

c++智能指针unique_ptr更多技巧

#include "iostream"
#include "vector"
#include "memory"

using namespace::std;

class AA
{
public:
    string  m_name;
    AA(){cout<<m_name<<"调用构造函数AA().\n";}
    AA(const string & name):m_name(name){cout<<"调用构造函数AA("<<m_name<<").\n";}
    ~AA(){cout<<"调用了析构函数~AA("<<m_name<<").\n";}

};

void func(unique_ptr<AA> &pp)
{
    cout<<"name="<<pp->m_name<<endl;
}

unique_ptr<AA>func(){
    unique_ptr<AA> pp(new AA("西施3"));
    return pp;
}
//函数func1()需要一个指针,但不对个指针负责。
void func1(const AA* a){
    cout<<a->m_name<<endl;
}
//函数func2()需要一个指针,并且会对这个指针负责、
void func2(AA *a){
    cout<<a->m_name<<endl;
    delete a;

}
//函数func3()需要一个unique_ptr,不会对这个unique_potr负责。
void func3(const unique_ptr<AA>&a){
    cout<<a->m_name<<endl;
}
//函数fun4()需要unique_ptr,并且会对这个unique_ptr负责。
void func4(unique_ptr<AA> a){
    cout<<a->m_name<<endl;
}


int main(){

//    unique_ptr<AA> pu1(new AA("西施"));


//    unique_ptr<AA> pu2;
//    //pu2=pu1;//错误
//    pu2=unique_ptr<AA>(new AA("西施2"));//用匿名对象赋值
//
//    cout<<"调用func()之前.\n";
//    pu2=func();//用函数的返回值赋值。
//    cout<<"调用func()之后。\n";



//    unique_ptr<AA> pu(new AA("西施"));
//
//    cout<<"赋值前。\n";
//    if(pu!= nullptr)cout<<"pu不是空的。\n";
//    pu= nullptr;
//    cout<<"赋值后\n";
//    if(pu== nullptr)cout<<"pu是空的。\n";

    unique_ptr<AA> pu(new AA("西施"));
    cout<<"开始调用函数。\n";
    //func1(pu.get());//函数func1()需要一个指针,但不对个指针负责。
   // func2(pu.release());//函数func2()需要一个指针,并且会对这个指针负责、
   // func3(pu);//函数func3()需要一个unique_ptr,不会对这个unique_potr负责。
    func4(move(pu));//函数fun4()需要unique_ptr,并且会对这个unique_ptr负责。
    cout<<"调用函数完成。\n";

}

调用构造函数AA(西施).
开始调用函数。
西施
调用了析构函数~AA(西施).
调用函数完成。


已发布

分类

可以收藏大挪耗一下。下载麻烦点城通网盘,站长保证下载速度,不会限速的,放心点就是了;分卷,安卓下载为txt:程序下载为url,不会下载参考不会下载。如果你想让本站活的久一点,请直接捐助

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注