What about this solution?
If you want a completely new Page2 instance every time you click the button, this is one way to do it that avoids a member variable. It depends on how complex Page2 really is and whether constructing it on-the-fly like this would cause a noticeable pause between the click and the show.

On the other hand, if you want the Page2 instance to "remember" what it was displaying the last time it was used, this approach will not be very good. Making a new instance each time will always initialize it to a fresh state with no memory of what was there before. So, if Page2 is used for setting options, with check boxes, radio buttons, and so forth, having them reset to the default settings each time will not make users very happy. If you have a single instance and simply show() and hide() it, then it will keep its state between uses.

My preference is to do as I suggested: create a single instance in the constructor and re-use it when needed. If you do need to set it to a default state, then add a method to the Page2 class to do that and call it before you show it.