The difference between two types of plugin layers in sampleUffSSD?

In the sampleUffSSD example, one can see the declaration of plugin layers as below:

std::unique_ptr<INvPlugin, void (*)(INvPlugin*)> mPluginPriorBox{nullptr, nvPluginDeleter};
std::unique_ptr<INvPlugin, void (*)(INvPlugin*)> mPluginDetectionOutput{nullptr, nvPluginDeleter};
std::unique_ptr<INvPlugin, void (*)(INvPlugin*)> mPluginConcat{nullptr, nvPluginDeleter};
std::unique_ptr<FlattenConcat> mPluginFlattenConcat[2]{nullptr, nullptr};

There are “unique_ptr<INvPlugin, void ()(INvPlugin)>” and “unique_ptr” styles. The former (mPluginPriorBox, mPluginDetectionOutput, mPluginConcat) seems defined in “NvInferPlugin.h”, and I can’t see their implementation. The latter (mPluginFlattenConcat) has its class definition “FlattenConcat” in “sampleUffSSD.cpp”.

If I am going to implement a new custom plugin layer, can I just follow “std::unique_ptr”? Is there any special feature in “<INvPlugin, void ()(INvPlugin)>”?