Tuesday, March 11, 2025

default_delete

Overview
default_delete is a functor object. aka deleter  object used by smart pointers to recycle the resources.

Details
default_delete is a functor object. aka deleter  object. It's provided by std library to delete the resources managed by the smartpointers  when it's destroyed. It can be used to delete both a array type or pointer type resource. The smartpointers can also provide a custom deleter object.

Syntax
template <class T> class default_delete
//specialization for arrays
template <class T> class default_delete<T[]>

Constructors
NameDescription
default_delete()Default constructor. Does nothing.
template <class U, class = typename
enable_if<is_convertible<U*,T*>::value>::type
default_delete
(const default_delete<U>& del)
Constructs a default_delete<T> object from another default_delete object. This overload participates in overload resolution only if U* is implicitly convertible to T*.

Example
unique_ptr<int> (new int, default_delete<int>());
template <class U, class = typename
enable_if<is_convertible<U*[],T*[]>::value>::type> 
default_delete
(const default_delete<U[]>& del)
Same as above except specialization for [].

Example
unique_ptr<int[]> (new int[10], default_delete<int[]>());

Methods
NameDescription
void operator()
(T* ptr)
The  default_delete<T> internally calls delete ptr.  However this can be overridden by a specialization for a different  operation as shown below.

Example
template<>
struct std::default_delete<FILE> 
{
    void operator()(FILE *fp)
    {
        fclose(fp);
    }
};

   FILE *fp = fopen("a.txt", "wt");
   unique_ptr<FILE> ufp(fp);
template< class U >
void operator()
( U* ptr) 
Array specialization. Calls delete delete[] ptr.



No comments:

Post a Comment