#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)。
发表回复