Alocação de memória em C ++

Estou confuso sobre a alocação de memória em C ++ em termos de áreas de memória, como área de dados Const, Stack, Heap, Freestore, Heap e área Global / Estática. Gostaria de entender o padrão de alocação de memória no seguinte trecho. Alguém pode me ajudar a entender isso. Se houver algo mais além dos tipos de variáveis mencionados no exemplo para ajudar a entender melhor o conceito, altere o exemplo.

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:
O que me confunde é, sepBar = new Foobar(); armazena o objeto na pilha, comoint nLoc; eint pubVar;, que são componentes do objeto armazenado na pilha? Parece contraditório para mim. Não deveria a vida depubvar epBar ser o mesmo?

questionAnswers(4)

yourAnswerToTheQuestion