shared pointer initial version