Aliás, aproveitando o tópico, gostaria de citar um trecho da filosofia que o C++ tem beeem diferente do Java:
C++ is designed to give the programmer choice, even if this makes it possible for the programmer to choose incorrectly
Ou seja, no caso do C++, a linguagem irá reclamar pouco se você optar por usar más práticas. Na verdade, ela não reclama nada.
Fazer um código moderno cabe exclusivamente ao programador. O Java, em muitos aspectos, tenta proteger você de fazer um mau código.
O C++, não. Ele assume que o programador sabe exatamente o que está fazendo.
É claro que o que eu disse não é 100% verdade. O C é um subset do C++ e você pode misturar as duas linguagens. Mas a comunidade C++ gosta de ressaltar que hoje as duas linguagens são bastante diferentes, pois do ponto de vista de práticas de programação, são dois mundo completamente distintos. Mistura-se hoje C com C++ apenas por questões de interoperabilidade e, dizer que as duas são “quase a mesma coisa” é como falar que o Java é quase igual ao C++, só porque existe o JNI e porque a sintaxe é parecida.
A prática do C++ inclui uso de smart pointers (na verdade, de um paradigma chamado de RAII), forte uso de templates, o uso correto do conceito de constness, uso de referências e bibliotecas de alto nível, como a STL e a boost. Se você nunca ouviu falar de nada disso, é porque provavelmente está programando como se fazia lá no início da era de informática. É como programar em Java desprezando toda a API e só usando o que o java.lang tem a oferecer.