(Edit: Perl is garbage collected since version 6, and Visual Basic is garbage collected since version 7. I am not aware of any language besides Objective C moving in the opposite direction.)
There is no Visual Basic 7. Visual Basic .NET is garbage collected as it runs on the CLR, but is quite a different language to VB6.
Similarly, VB vs VB.NET.
It is hard to get right with existing code bases.
Additionally C++11 got a GC API, but requires explicit programmer control.
http://www.stroustrup.com/C++11FAQ.html#gc-abi
C++'s memory model is tainted by C's compatibility, as such it is quite limited in the GC algorithms that can be implemented.
How can you guarantee that the component library that your company just bought, available only in binary form isn't doing something like this?
void cool_stuff_with_widget(const std::shared_ptr<UI> ptr)
{
UI* evilPtr = const_cast<UI*>(ptr->get());
// now store evilPtr somewhere else and try to use it any time the library feels like it
}
No one is going through disassembly to check such behaviors.C++ RC is a very welcoming addition to the language, but it only works if everyone plays by the rules, 100% of the time.
It's just better documented and easier to spot the bugs if you're doing RC.
It is impossible to prove that all memory access to a given address are done via the RC wrapper object, specially in the presence of third party libraries in binary form.
Sadly due to its C compatibility, there is no way around this in C++.
This is mostly a problem in large projects with various skill levels across team members, having high attrition levels.