Effective Modern
C++ is not outdated (it's about C++11/14), nor is Meyers syntax only (though the way this particular book opens is on some very tedious arcane differences between auto, template etc. type inference that is basically about syntax). I, however, would not recommend it to you straight out of the box as I regard the book rather advanced (unless I misremember, it does assume a passing knowledge of lvalue, rvalue, std::move etc).
What I would recommend, and I think Daniel disagrees with me here, is for you to start with the old Meyers books, in particular Effective
C++. The syntax may be outdated, and it will obviously not have all the bells and whistles of modern
C++, but I still think its advice has aged well and it is a good starting point of the dos and don'ts of
C++. As I said earlier, your knowledge of
C++ seems decades---plural---behind (the next book in Meyers series, More Effective
C++ published in 95 goes into detail of implementation and usecase of a shared pointer), and Meyers' old books are basically written for someone with your background moving from "C with classes" to
C++.
Praise for Meyers' books is pretty much universal (
here for instance, or more specifically targeted at
quantitative finance jobs ). These books shall be profitable reading, given that I happen to know what lvalues ("left value", assigned and modifiable) and rvalues ("right", temporaries such as function returns) are. I would not have made it very far in debugging gcc error messages otherwise.
Now I'm not here to convince you to learn new things if you have already decided that you know better, and that ignorance is something to be proud of. [...] It is not simply for fun that people do this or just because someone might forget to type delete (and why this happens is not a matter of simply forgetting delete, but about the more general concept of memory ownership-for someone coding funxtionally simple noninteractive programs at home, these ideas may not come up), but for elegance and to make things work at scale.
Well yes I wrote something crass about people forgetting to type 'delete' lines, but making assumptions based on some light-hearted remark is very much an exercise in creativity.
On the contrary, I find that holding trenchant opinions helps with remembering the topics they are about.
Opinions are after all of scarce value. Allow me to digress: the Spartans knew this, they were renown in the ancient world for being somewhat monosyllabic ('laconic' stems from here). This was because deep down they understood that it is important to see things and to discern situations for what they are, rahter than instead mediating reality with words (=opinions), which is conductive to doubt, lies and treachery.
The Spartans left us just a few deaf stones, and yet they won the war of the Peloponnese for dominance over ancient Greece against their rivals, the unrivaled Athenians, the originators of rhetoric and dialectics, who on the contrary left a huge material and above all cultural legacy.
Yet Plato, from democratic Athens, held the Spartan society in the highest esteem.
In real life I have spent a few years coding a numerical solver for nonstandard systems of PDEs in complex domains, with environmental pressures being on the ends (obtaining results, publish, write thesis) and not on the means (admittedly no "make it work, make it right, make it fast" mentality).
I have the feeling this is after all a head start in quantitative finance, because I get the impression that learning about Software Development on top of a numerically-literate substrate is somewhat easier than the other way around, of teaching a smattering of Applied Mathematics to a software developer. Care to confirm?
Back to the topic, @Daniel_Duffy too reports in the opening of paragraph 2.2.1 of his
Financial Instrument Praising using C++ (2nd ed.) , that the main issue here is not as much about elegance, but more prosaically about dangling pointers and memory leaks caused by error-prone bookkeeping of 'raw' pointers. This in turn makes the memory Heap a heap of a mess.
I also understand there are other less impairing problems involved (exceptions being thrown before a pointer is deleted): I can appreciate the nuances, I am coming across as a fanatic of raw pointers here and this was unintended.