変数(オブジェクト)の寿命について質問です。

struct hoge{
  int dummy;
};

hoge* gh;

void func(){
  hoge* h=new hoge;
  h->dummy=10;
  gh=h;
}

void main(){
  func();
  printf("%d", gh->dummy);
}

このようなプログラムで、hogeのオブジェクトhは、funcの中で寿命が切れてしまうのでしょうか。
だとすると、それをグローバルなポインタで指して、関数外から使うことは
いけないのでしょうか。