このプログラムってちゃんと解放されてますか?

class Test{
  int x;
public:
  Test(int x){
    this->x=x;
  }
  ~Test(void){
    delete this;
  }
};

Test *New(int x){
  return new Test(x);
}

void main(void){
  Test *data;
  data=New(20);
}