// new T[n] construye los n elementos al reservar, aunque todavía nadie los use.
#include <iostream>

class Counted {
public:
    Counted() {
        constructed()++;
    }
    ~Counted() {
        destroyed()++;
    }
    static int& constructed() {
        static int count = 0;
        return count;
    }
    static int& destroyed() {
        static int count = 0;
        return count;
    }
};

void report(const char* step) {
    std::cout << step << ": construidos=" << Counted::constructed()
              << " destruidos=" << Counted::destroyed() << "\n";
}

int main() {
    Counted* items = new Counted[1000];
    report("después de new[]");
    delete[] items;
    report("después de delete[]");
    return 0;
}
