#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)。

发表回复