They work. But the entire point is that smart pointers do it for you, and in doing so, clean up your code and avoid the inevitable mistakes that will be made. In C++11 and even more so in C++14, owning pointers are almost always just worse.
One of the major benefits of using smart pointers is that they make code easier to reason about. You lose that benefit if you manually manage memory, even if you do so perfectly.