In C++, we can manage resources by objects, i.e. acquiring resource in Ctor, and releasing it in Dtor (RAII). This relies on C++'s automatic destructor invocation. But how is this done under the hood? For example, how C++ know to call Dtor for c1 but not c2. (I know this must have been answered before, but all of my searches ended in topics explaining how to use RAII). Thanks!
class Cat;
Cat c1;
Cat* c2 = new Cat();
Edit:
I know I need to call delete for c2. I just don't understand how Dtor is called when c1 goes out of scope.
 
    