私は私のunique_ptrをしimplemetedました:ここではdefault_deleter私のクラスunique_ptrにカスタムディテクタを提供するには?
template<typename T>
struct default_deleter
{
default_deleter() { }
template<typename _Up>
default_deleter(const default_deleter<_Up>&) { }
void operator()(T* p) const
{
delete p;
}
};
ある
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;
}
が、私は、カスタムデリータ使用しようとしていますとき:
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)で解決しない問題は何ですか? –
まず、問題を再現する[*、* complete *、example](https://stackoverflow.com/help/mcve)に* real *コードを投稿してください。 – WhozCraig
これは実際のコードであり、後でアップグレードされます。 – Dsdsd