McCree is a win button right now... the devs have said they intended him to be a counter to agile heroes and the fact that fan the hammer just *happens* to also make him a tank killer was an accident. A lot of pro teams are apparently running double McCree. They're looking into ways to nerf him.
I would categorize the "true" tanks as Reinhardt, Winston, and Zarya. Purely because non-ult-charging, shoot-people-who-can't-shoot-back barriers are an essential part of any team. Roadhog isn't a good tank because, while he's good at keeping himself alive, in the process he feeds the enemy massive amounts of ult (there are characters that can go from 0 to 100% ult charge just by killing Roadhog). D'va simply isn't a tank in the traditional sense; her active defense is extraordinarily powerful but it has a 23% uptime, almost as bad as Genji. Winston and Zarya both have a 40% uptime (Mei beats them at 45%, but her Ice Wall can't be shot through so she's only a semi-tank really), while Reinhardt takes the cake with 100%.
Reinhardt is easily the "purest" tank in that he *demands* that the enemy waste time shooting him instead of his teammates, yet with his 2000 HP barrier and armor he doesn't give them much ult in the process. Reinhardt has a crippling weakness for verticality however, Pharah and Hanzo might as well be in an alternate dimension for all he can do to them. Side note, what a lot of people don't realize about Reinhardt is if you put his barrier behind a pillar or corner, you basically double its health because the weakspot is hidden. Also rule of thumb, always assume pins will fail and don't charge unless you're ok with where you're going to end up. Its a hard rule to follow but it will make your Reinhardt play far better.
Winston requires his team to play in a specific way to make good use of him but he can definitely be a team's only tank if played correctly. He needs a lot of healing, and he needs his teammates to be constantly threatening the enemy team. But if all that is true, a well played Winston can be simultaneously ganking and tanking at the same time. Its an... odd sight. He's very mobile, very threatening to squishies, and his barrier doesn't require him to be physically present. The majority of the community plays Winston as an offensive tank on payload maps and that's literally the worst maptype for him; he's at his best defending because the kind of characters he counters are the kind of characters most offense teams want.
Zarya shouldn't require much explanation, she saves people and can quickly develop into a DPS/tank hybrid.