// Cuenta las reservas con new[] y las liberaciones con delete[] de todo el programa.
// Reemplaza esos operadores globales, así que se incluye en un solo .cpp de cada programa.
#ifndef ALLOC_COUNT_H
#define ALLOC_COUNT_H

#include <cstddef>
#include <new>

inline std::size_t& array_news() {
    static std::size_t count = 0;
    return count;
}

inline std::size_t& array_deletes() {
    static std::size_t count = 0;
    return count;
}

void* operator new[](std::size_t bytes) {
    ++array_news();
    return ::operator new(bytes);
}

void operator delete[](void* block) noexcept {
    if (block != nullptr) {
        ++array_deletes();
    }
    ::operator delete(block);
}

void operator delete[](void* block, std::size_t) noexcept {
    if (block != nullptr) {
        ++array_deletes();
    }
    ::operator delete(block);
}

#endif
