Using `std::unique_ptr` with custom deleter functions

By default, std::unique_ptr uses the delete keyword to free the memory it owns. However, in some cases, we may need to use a custom deleter function instead. This allows us to control how the memory is released, especially when dealing with resources other than raw memory.

To use a custom deleter function with std::unique_ptr, we need to provide the function as a template argument when declaring the pointer. Here’s an example:

// Custom deleter function
void customDeleter(int* ptr) {
    // Custom clean up logic goes here
    delete ptr;
    // Additional clean up steps, if necessary
}

int main() {
    // Using std::unique_ptr with custom deleter
    std::unique_ptr<int, void(*)(int*)> ptr(new int(), customDeleter);

    // The resources will be properly deallocated when ptr goes out of scope
    // Custom deleter function gets called instead of default delete
    // Additional clean up steps, if any, will also be executed

    return 0;
}

In the example above, we define a custom deleter function called customDeleter that takes an int* as its parameter. Inside the function, we perform the necessary clean-up steps for the specific resource we are managing. In this case, we simply use the delete keyword to free the memory allocated for the integer.

When declaring the std::unique_ptr, we provide the custom deleter function as the second template argument. The void(*)(int*) specifies a function pointer type that takes an int* and returns void. This tells the std::unique_ptr to use customDeleter for resource deallocation instead of the default delete operator.

Using std::unique_ptr with custom deleter functions gives us the flexibility to handle resource deallocation in a customized manner. It is particularly useful when dealing with non-standard resources or when additional clean-up steps need to be performed alongside memory deallocation.

#C++ #SmartPointers