In caso di smart pointer (quali?) il costruttore di copia ti serve soltanto se intendi implementare la deep copy, cioè la creazione ex novo di un oggetto che sia la copia reale di un oggetto.
Di solito gli smart pointer si limitano a incrementare un contatore, ma la memoria puntata è la stessa. Se vuoi differenziare le zone di memoria, devi provvedere a mano.
Se invece non ti interessa la deep copy, non ti serve il costruttore di copia. Il compilatore richiamerà "automagicamente" quello dello smart pointer e di eventuali altri oggetti che implementano a loro volta il costruttore di copia (il cui fine ultimo, in fondo, è sollo quello di gestire i puntatori raw ed evitare loro una duplice delete).