It is unfortunate that many learning resources don't show modern C++ so the language is perceived worse than it is and also more bugs are written, than is necessary.
It is unfortunate that many learning resources don't show modern C++ so the language is perceived worse than it is and also more bugs are written, than is necessary.
A rule of thumb: if your function doesn't have a return type, consider that your design maybe wrong in some way.
Note: Any negative reactions to smart pointers on my side may be fueled by a disturbing amount of cargo culting that I had to witness since their inclusion in the standard.
By whom?
> once you fix your programs ownership semantics.
How do you heck know how my programs need fixing?
> Any negative reactions to smart pointers on my side may be fueled by a disturbing amount of cargo culting that I had to witness since their inclusion in the standard.
Any positive reactions to smart pointers on my side may be fuelled by over 30 years experience in using them.
You where the one complaining that sample one liners with void return types where bad code. In my experience shared_ptr is overkill in nearly all trivial code examples, so any one liner containing one is bad code.
> Any positive reactions to smart pointers on my side may be fuelled by over 30 years experience in using them.
Hope you never had to deal with code reviews that suggested putting scoped std::vector uses in shared_ptr s to avoid stack overflows. Or really any code that put objects into smart pointers because it could not because it should.
What's your rationale for that assertion?
Unless I'm reading this wrong (and I'm seeking to be corrected here), it's still fine to use new/delete in certain contexts
struct bla {
int n;
int[] mem;
bla(int n) : n(n), mem(new int[n]{}) {}
~bla() { delete[] mem; }
/* forbid copies (for uniqueness) and moves (to keep this short) */
bla(bla &) = delete;
bla(bla &&) = delete;
bla &operator=(bla &&) = delete;
};
Edit to remove unnecessary null-checkingYet this is also a good example of why you wouldn’t need “delete” or a destructor at all, if “mem” changes to std::unique_ptr<int[]> type.
And even then, you should probably seriously consider std::vector or std::array before trying a unique_ptr array.
int[] mem;
even legal C++?If the [] was after the variable name, because it is the last member, most C++ compilers (GCC, Clang, and MSVC) have a non-standard extension: https://en.wikipedia.org/wiki/Flexible_array_member
a.cpp:2:13: error: expected unqualified-id before '[' token