Вы действительно хотите скопировать состояние своего класса или перенести его?Если вы хотите скопировать его, вы делаете это так же, как любой другой класс с указателями в нем:
template < typename T >
C<T>::C(C const& other) : ptr(new T(*other.ptr)) {} // or maybe other.ptr->clone()
Если вы действительно хотите передать владение указателем, вы можете сделать это с неконстантной "копией""конструктор, но я бы порекомендовал вам сделать что-то более очевидное на сайте вызовов;что-то, что говорит людям, читающим код, о том, что право собственности перешло.