The title itself is a recipe for disaster. Also this is a semi rant.
Yesterday I was informed that I will have the honour to implement the core functionality - which is an interface layer to use the driver of a very expensive hardware shit - of the software I’ve been working on as a frontend dev.
There are two possibilities for the language: C++ or C#. The one that was proposed/imposed is C#, which I know nothing of, while at least I have some hobbyist experience with C++; when asked if I could take some time to familiarise myself with C# I was basically laughed in the face, saying I will learn on the field and at least some of them have some experience with it.
Should I insist to go with C++, or is that an even worse idea in an already fucked up situation?
Circular references can also impede garbage collection, don’t forget.
And to further clarify, a proper object wrapping a resource like the ones you listed will release them when it is eventually collected, in the finalizer/destructor. However, you can’t know when that will happen, so we have IDisposable.Dispose() which can be used to release whatever critical resources the object is holding right away. :)