#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;
}
int main()
{
// AA*p=new AA("西施");
// unique_ptr<AA> pu1(p);
// cout<<"m_name="<<(*pu1).m_name<<endl;
// cout<<"m_name="<<pu1->m_name<<endl;
// cout<<"m_name="<<(*p).m_name<<endl;
// cout<<"m_name="<<p->m_name<<endl;
// unique_ptr<AA> pu1(new AA("西施"));
// cout<<"m_name="<<(*pu1).m_name<<endl;
// cout<<"m_name="<<pu1->m_name<<endl;
// AA*p =new AA("西施");
// unique_ptr<AA>pu2=p;//错误,不可以普通指针直接赋值智能指针。
// unique_ptr<AA>pu3=new AA("西施");//错误,不能把普通指针自己赋值给智能指针。
// unique_ptr<AA>pu2=pu1;//错误,不能用其他智能指针拷贝构造。
// pu3=pu1;//错误,不能用=对unique_ptr进行赋值。
//delete p;
// AA*p =new AA("西施");
// unique_ptr<AA>pu1(p);
// unique_ptr<AA>pu2(p);
// unique_ptr<AA>pu3(p);
//错误,智能指针被多次释放成为了野指针
AA *p=new AA("西施");
unique_ptr<AA> pu(p);
// cout<<" 裸指针的值是:"<<p<<endl;
// //cout<<" pu输出的结果是:"<<pu<<endl;
// cout<<" pu.get()输出的结果是:"<<pu.get()<<endl;
// cout<<" pu的地址是:"<<&pu<<endl;
func(pu);//不能传值,因为没有拷贝构造函数
//智能指针不支持指针的运算+,-等
}
调用构造函数AA(西施).
name=西施
调用了析构函数~AA(西施).
发表回复