#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(西施).

发表回复