#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(西施).
调用函数完成。
发表回复