美文网首页
Unique_ptr删除器

Unique_ptr删除器

作者: NullUser | 来源:发表于2023-08-14 14:24 被阅读0次
void mydeleter(string *pdel)
{
    delete pdel;
    pdel = nullptr;
    //可以打印日志
    cout<<"mydeleter"<<endl;
}

class CallableObject
{
  void operator()(string *pdel)
 {
    delete pdel;
    cout << "delete with callable object" << endl;
 }
};
 
void test19(){

    // a.1
    typedef void(*fp)(string *);
    unique_ptr<string, fp> ps1(new string("good luck"), mydeleter);
 
    //a.2
    using fp2 = void(*)(string *);
    unique_ptr<string, fp2> ps2(new string("good luck"), mydeleter);
 
    //a.3
    typedef decltype(mydeleter)* fp3; //decltype()返回函数类型void(string *),所以要加*,现在fp3应该是void *(string *)
    unique_ptr<string, fp3> ps3(new string("good luck"), mydeleter);
 
    //a.4
    unique_ptr<string, decltype(mydeleter)*> ps4(new string("good luck"), mydeleter);
 
    //a.5,lambda表达式,可以理解成operator()类类型对象
    auto mydella = [](string *pdel)->void{
        delete pdel;
        pdel = nullptr;
        cout<<"mydella"<<endl;
    };
    //注意,lambda表达式mydella被编译器理解成对象(即ps5的参2),所以我们类型不能加*,否则地址与对象不匹配
    //而上面的函数名mydeleter代表是首地址,需要加*地址符号进行匹配。(对象不是对象,&对象才是地址)
    unique_ptr<string, decltype(mydella)> ps5(new string("good luck"), mydella);

    //a.6 使用可调用对象
    unique_ptr<string, CallableObject> ps6(new string("good luck"), CallableObjcet());

    //a.7
    CallableObject obj;
    unique_ptr<string, CallableObject> ps7(new string("good luck"), obj);
    
    //a.8
    CallableObject *pObj = nullptr;
    unique_ptr<string, CallableObject> ps7(new string("good luck"), (*pObj));
 
}

相关文章

  • unique_ptr 实现

    unique_ptr unique_ptr 简单实现

  • C++智能指针

    unique_ptr std::unique_ptr 是通过指针占有并管理另一对象,并在 unique_ptr 离...

  • function wrapper

    函数包装器,能够进行移动操作: 但是,unique_ptr > impl;这句会报错,因为F未定义。于是为impl...

  • 智能指针

    一、auto_ptr 二、unique_ptr 函数传参的情景—— void func(unique_ptr

  • C++ Smart Pointers - Transferrin

    The basic idea of a unique_ptr is that there exists only ...

  • modern c++(5)-智能指针

    auto_ptr与unique_ptr auto_ptr与unique_ptr都是独占所有权的智能指针类型,前者由...

  • C++11智能指针:unique_ptr

    unique_ptr 1.概念 unique_ptr形如其名,与所指对象的内存紧密地绑定,不能与其他的unique...

  • 智能指针

    memory include auto_PTR unique_ptr

  • 右值,右值引用,move

    问题构造函数接受一个unique_ptr的参数。 如果是定义一个unique_ptr然后直接传入,会报错。像这样。...

  • c++11智能指针(二) unique_ptr

    unique_ptr是一个独占指针,它不允许其他的智能指针共享其内部的指针。例如 初始化unique_ptr 指定...

网友评论

      本文标题:Unique_ptr删除器

      本文链接:https://www.haomeiwen.com/subject/xghcmdtx.html