大挪耗

c++智能指针的删除器

#include "iostream"
#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 deletefunc(AA *a)
{
    //删除器,普通函数。
    cout<<"自定义删除器(全局函数).\n";
    delete a;
}

struct deleteclass
{
    void operator()(AA *a){
        cout<<"自定义删除器(仿函数)。\n";
        delete a;
    }
};

auto deleterlamb=[](AA *a){
    //删除器,lambda
    cout<<"自定义删除器(lambda)。\n";
    delete a;
};

int main(){
    //shared_ptr<AA> pa1(new AA("西施a"));//用缺省的删除器。

    shared_ptr<AA> pa1(new AA("西施a"),deletefunc);//删除器,普通函数。
    shared_ptr<AA> pa2(new AA("西施b"),deleteclass());//删除器,仿函数。
    shared_ptr<AA> pa3(new AA("西施c"),deleterlamb);//删除器,lambda表达式。

    unique_ptr<AA, decltype(deletefunc)*> pu1(new AA("西施1"),deletefunc);
    unique_ptr<AA, deleteclass> pu2(new AA("西施2"),deleteclass());
    unique_ptr<AA, decltype(deleterlamb)> pu3(new AA("西施3"),deleterlamb);


}

调用构造函数AA(西施a)。
调用构造函数AA(西施b)。
调用构造函数AA(西施c)。
调用构造函数AA(西施1)。
调用构造函数AA(西施2)。
调用构造函数AA(西施3)。
自定义删除器(lambda)。
调用了析构函数~AA西施3)。
自定义删除器(仿函数)。
调用了析构函数~AA西施2)。
自定义删除器(全局函数).
调用了析构函数~AA西施1)。
自定义删除器(lambda)。
调用了析构函数~AA西施c)。
自定义删除器(仿函数)。
调用了析构函数~AA西施b)。
自定义删除器(全局函数).
调用了析构函数~AA西施a)。


已发布

分类

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

发表回复

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