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