#include <stdio.h>

class MyObject
{
public:
  MyObject()
  {
    printf("MyObject::MyObject\n");
    foo();
  }
  virtual ~MyObject()
  {
    printf("MyObject::~MyObject\n");
  }

public:
  void foo()
  {
    printf("MyObject::foo\n");
    MyObject::instance().foo2();
  }

  void foo2()
  {
    printf("MyObject::foo2\n");
  }

public:
  static MyObject& instance()
  {
    static MyObject g_instance;
    return g_instance;
  }
};

int main(int argc, char *argv[])
{
  MyObject& object = MyObject::instance();
  object.foo();
  return 0;
}