**My background:**  just out of school training under old Bell Labs programmers; been working for 3 years, 2 on undergrad research project; data acquisition / process control in VB.NET.  Spent 1.5 years doing work on an enterprise database application in VB6.  Currently working on project for _embedded_ PC with 2GB of storage, 512MB of RAM, 500MHz x86 CPU;  several apps running concurrently written in C++ with an IPC mechanism in between.  Yes, I'm young.

**My opinion:**  I think C++ can work effectively _given the environment I've written above_.  Admittedly, hard real-time performance isn't a requirement for the app I'm on, and in some embedded applications, that can be an issue.  But here are the things I've learned:

- *C++ is fundamentally different than C* (ie, there is no C/C++).  While everything that is valid C is valid C++, C++ is a very different language and one needs to learn how to program in C++, not C, to effectively use it in _any_ situation.  In C++, you need program object-oriented, not procedurally.  One of my coworkers explained to me that I used to program procedurally in objects, which is a grand mess and is hard to maintain.  When I started to apply more object-oriented techniques, I found my code's maintainability/readability went up.

- C++ provides additional features in the form of object-oriented development that can provide *a way to simplify code to make it easier to read/maintain*.  Honestly, I don't think there's much in the way of a performance/space efficiency improvment in doing OOP.  But I think OOP is a technique that can help split up a complex problem into lots of little pieces.  And that is helpful for the people working on the code, an element of this process that should not be ignored.

- Many arguments against C++ have primarily to do with dynamic memory allocation.  C has this same problem too.  You can write an object oriented application without using dynamic memory, although one of the benefits of using objects is that you can allocate these things dynamically in an easy fashion.  Just as in C, you have to be careful about how manage the data to reduce memory leaks, but the [RAII technique][1] makes this simpler in C++ (make dynamic memory destruct automatically by encapsulating it in objects).  In some applications, where every memory location counts, this may be too wild & wooly to manage.


  [1]: http://jalf.dk/blog/2010/01/the-meaning-of-raii-or-why-you-never-need-to-worry-about-resource-management-again/