of course you sometimes need new and delete, sometimes for manual memory management or when implementing libraries. For all other cases std::make_unique should be the default and sometimes make_shared is ok if you know its going to be shared anyway.