Asignación de memoria en C ++

Estoy confundido acerca de la asignación de memoria en C ++ en términos de las áreas de memoria, como el área de datos Const, Stack, Heap, Freestore, Heap y el área Global / Estática. Me gustaría entender el patrón de asignación de memoria en el siguiente fragmento. ¿Alguien puede ayudarme a entender esto? Si hay algo más aparte de los tipos de variables mencionados en el ejemplo para ayudar a comprender mejor el concepto, modifique el ejemplo.

class FooBar
{
      int n; //Stored in stack?

      public:

          int pubVar; //stored in stack?

          void foo(int param)  //param stored in stack
          {
                int *pp = new int; //int is allocated on heap.
                n = param;
                static int nStat;  //Stored in static area of memory
                int nLoc;          //stored in stack?
                string str = "mystring"; //stored in stack?
                ..
                if(CONDITION)
                {
                    static int nSIf; //stored in static area of memory
                    int loopvar;     //stored in stack
                    ..
                }
          }
}

int main(int)
{
     Foobar bar;    //bar stored in stack? or a part of it?

     Foobar *pBar;  //pBar is stored in stack

     pBar = new Foobar();  //the object is created in heap?  What part of the object is stored on heap

}

EDITAR:
Lo que me confunde es, sipBar = new Foobar(); almacena el objeto en el montón, ¿cómo es queint nLoc; yint pubVar;, que son componentes del objeto almacenado en la pila? Me suena contradictorio. No debería la vida depubvar ypBar ¿ser el mismo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta