大挪耗

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;
}

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


已发布

分类

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

发表回复

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