Ответ 1
Конструкция по умолчанию делает это для вас:
template<class T> class shared_ptr
{
public:
explicit shared_ptr(T * p = 0): px(p)
{
//Snip
}
//...
private:
T * px; // contained pointer
count_type * pn; // ptr to reference counter
};