use boost::shared_ptr instead of std::auto_ptr in std::vector
add cpp version chocolate sginleton