0
我Implemeted一个我的unique_ptr:如何在我的类unique_ptr中提供自定义删除器?
template<class T, typename D = default_deleter<T> >
class unique_ptr
{
private:
T* _ptr;
D deleter;
public:
//Default constructor
explicit unique_ptr(void): _ptr(nullptr) { }
//Constructor with the provided pointer to manage
unique_ptr(T* p) throw() : _ptr(p), deleter(default_deleter<T>())
{ }
unique_ptr(T* p, D d) throw() : _ptr(p), deleter(d) { }
~unique_ptr(void) throw() // never throws
{
delete _ptr;
_ptr = nullptr;
}
这是一个default_deleter
template<typename T>
struct default_deleter
{
default_deleter() { }
template<typename _Up>
default_deleter(const default_deleter<_Up>&) { }
void operator()(T* p) const
{
delete p;
}
};
,但是当我试图使用定制删除:
struct MyCustomDeleter {
void operator()(SomeResource* p) {
p->releaseResources();
delete p;
}
};
int main() {
unique_ptr<SomeResource, MyCustomDeleter> ptr1(new SomeResource(1));
我得到 不匹配函数调用'MyCustomDeleter :: MyCustomDeleter(default_deleter)'
实现你自己的'unique_ptr'类的原因是什么?它解决了什么问题['std :: unique_ptr'](http://en.cppreference.com/w/cpp/memory/unique_ptr)没有解决? –
对于初学者来说,请在[minimal,* complete *,example](https://stackoverflow.com/help/mcve)中发布* real *代码,以重现您的问题。 – WhozCraig
它是真正的代码,将在稍后升级。 – Dsdsd