I think smart pointers are great. While I’ve only made superficial use of them in the book, I have an upcoming series of DirectX videos that make extensive use of smart pointers.
I don’t believe the effort is terribly large. It’s mostly a matter of replacing pointer declarations and explicit use of “new”. And if you still need access to the underlying raw pointer, you can use the get() accessor.
As to the benefits, there are several. You no longer have to explicitly delete your heap-allocated memory. This helps prevent memory leaks. Furthermore, your smart pointers still free their memory if a code block exits prematurely (e.g. an exception is fired).