Comment on: If I want to be more of a defensive programmer where do I start?
Most of the responses here paper over the problem or argue to be more vigilant or use tools to be vigilant for you. Vigilance is not a complete approach to security as one error can lose everything.
You should change your programming paradigm entirely and establish security boundaries between separate areas of concern so that even if one area of concern is compromised than other areas of concern are not. Generally, one establishes security boundaries at a computer programming level by breaking up computer programs into separate and differently privileged chunks of code, differently privileged processes, differently privileged user accounts, differently privileged virtual machines and differently privileged physical machines. You can even expand on this approach and give things in the physical world such as different people, businesses or other physical objects different privileges, accounts, passwords and keys.
Please, please, please actually read the language standard. C++ might be a bit too big to read all at once but you should at least read the C language standard and you should have both on hand for reference. You can find draft copies of the standards for free.