Of course it's not.
Originally Posted by execute
...Unless you are using a smart pointer.
You learn that when you create something new, you learn to delete it.
That's C. Not C++.
You use malloc you learn to free.
Clutters up the code with possibly lots of close calls instead of just letting it go out of scope. Furthermore, not using the destructors usually results in bugs because you forgot to add a close call if certain conditions happens.
It is good practice and it frees up memory faster than letting it go out of scope.
Don't compare C++ to C# and Java.
Maybe if you're future is in C# or java, then you're right it's bad practice.
C++ has RAII and you can be sure it beats C#, Java AND the manual C way.