Your statement seems meaningless. It's possible to have safe code in any language (even assembly language) as long as "everyone on the team plays by the rules." The question is, how hard are the rules to understand and how obvious are deviations from them? C++ has more rules and less obvious behavior when you deviate from them, so it's strictly less safe than C.
The advantage of C++ was always that it enabled (slightly) more rapid development than C.
std::vector isn't "safe." If you're using a std::vector::iterator and someone appends to the end of the vector, your iterator may be invalidated. std::string isn't safe either. It's easy to create references to strings that don't exist any more, by returning a const reference to a string and then later deleting the string. smart pointers aren't safe-- partly because of cycles, partly because of references to smart pointers, partly because you inevitably have to convert them to something else to use them. I've been using C++ for years and I've debugged all these problems.