Add basic implementation of shared pointer