I'm fairly new to C++ so please forgive me for my ignorance. I'm under the impression that anything between { and } is called a scope, and that you can create a separate scope inside a function, or anything else, just by adding more brackets.  For example:
int foo(){
    std::cout << "I'm inside the scope of foo" << std::endl;
    {
        std::cout << "I'm inside a scope that's inside the scope of foo" << std::endl;
    }
}
I was learning about this in relation to pointers and memory leaks.  My understanding is when you leave a scope all variables should be freed from memory unless the memory was manually allocated with new or malloc. In my testing, however, this does not seem to be the case.  I've written the following script to test this:
#include <iostream>
void test(){
    {
        int regdata = 240;
        int* pointerInt = new int(1);
        *pointerInt = 15;
        std::cout << "RegData Addr: " << ®data << std::endl;
        std::cout << "Value:        " << regdata << std::endl;
        std::cout << "Pointer Addr: " << &pointerInt << std::endl;
        std::cout << "Pointer:      " << pointerInt << std::endl;
        std::cout << "Value:        " << *pointerInt << std::endl;
        std::cout << std::endl;
        std::cout << "Press any key then enter to leave the scope.";
        char temp;
        std::cin >> temp;
        //delete pointerInt;
    }
    std::cout << "The scope has been left." << std::endl;
    std::cout << "Press any key then enter to leave the function.";
    char temp;
    std::cin >> temp;
}
int main(){
    test();
    std::cout << "The function has been left." << std::endl;
    std::cout << "Press any key then enter to leave the program.";
    char temp;
    std::cin >> temp;
}
I start this program on my Windows 10 computer and have been monitoring the memory usage using the program Cheat Engine.  Now, depending on whether or not I have delete commented out it will delete the bytes that hold 15 and replace them with random bytes when I leave the scope as it should.  However, the memory holding the 240 is not freed until after I leave the scope of test (at which point the 240 is replaced with 1). And regardless of if the delete is commented out, the actual pointer itself is never deleted out of memory.
Is my compiler or my machine not compiling/running my code correctly? Or am I misunderstanding memory management between scopes? If it's the latter, please correct me so I can properly understand what is supposed to happen. Also let me know if something doesn't make sense!
 
     
    