分享
三行代码  ›  专栏  ›  技术社区  ›  CiaranWelsh

在结构中包装这个私有deleter函数的目的是什么?

c++
  •  1
  • CiaranWelsh  · 技术社区  · 1 周前

    我一直在努力理解 answer deleter_fn 在一个 struct ?

    class C {
    public:
      void foo() {
        underlying_foo(handle.get());
      }
    
      void bar() {
        // transfers ownership
        underlying_bar(handle.release());
      }
    
      // use default copy/move constructor and assignment operator
    
    private:
      struct deleter {
        void operator()(T* ptr) {
          deleter_fn(ptr);
        }
      };
      std::unique_ptr<T, deleter> handle;
    };
    

    为什么不:

    ...
    private:
    
        void operator()(T* ptr) {
          deleter_fn(ptr);
        }
      std::unique_ptr<T, deleter> handle;
    };
    
    1 回复  |  直到 1 周前
        1
  •  1
  •   bolov    1 周前

    在你的版本中没有 deleter 所以 std::unique_ptr<T, deleter> handle std::unique_ptr<T, C> handle; (因为你的 operator() C C类 std::unique_ptr 是一个空类,那么它可以进行一些优化,而不实际存储deleter对象。否则它必须为删除程序提供额外的空间,这在您的情况下是不必要的。