Constructors are protected

This patch basically moves all the Constructors, Destructors and `init` methods to the `protected:` space.

it also adds the `CC_DISALLOW_COPY_AND_ASSIGN` macro, and uses this macro in the `private:`

The patch also fixes other minor issues, like replacing `const char*` with `const std::string&`