Bonsoir,
tout d'abord attention : le fait que du code compile ne signifie pas que le code est correct, étant donné que certaines erreurs (celle là par exemple) ne peuvent pas être détectée par le compilateur. Si vous essayiez d'exécuter votre code vous devriez avoir un segmentation fault, dû au fait ici que lors du return les destructeurs de vos pointeurs essayent de libérer de la mémoire allouée statiquement (et un double free au passage).
Les unique_ptr garantissent une seule référence sur un pointeur uniquement si vous leur transférez entièrement la propriété du pointeur (ce qui n'est pas le cas ici vu que vous la transférez à deux objets différents). C'est donc à vous de faire attention à ne pas vous retrouvez dans cette situation.