You can see it like that:
A scope is represented by "{}". The scope starts with "{" and ends with "}".
While code is executed and memory is located on the stack! the compiler keeps track on it and deconstructs it when the executing thread leaves the scope "}". At that moment all objects that were created locally in the scoped go "out of scope".
A quick illustration:
Code:
void hello()
{
A a_oLocalObject;
A* a_pGlobalObject = new A();
}// Compiler will call the deconstructor for a_oLocalObject here
When hello gets executed, 2 Objects of the type A gets created. The difference is that a_oLocalObject will be deconstructed when the scope is over (end of the function), while a_pGlobalObject is not stack / local orientated and will stay created.
You can obtain a pointer from the local object by using the reference keyword "&". But keep in mind because as said by algernog, the moment the scope gets lost, the object is deconstructed and the object is no longer valid.
If you get yourself into pointer it is always a good case to get used to smart pointers.