It's great to see C++ getting an ecosystem and Bjarne's excellent writings help a lot.
It's great to see C++ getting an ecosystem and Bjarne's excellent writings help a lot.
Whatever float your boat (and your particular niche).
In theory, doing without is a huge problem, because you're running the risk of resource leaks and stale identifiers - but in practice, neither is a huge problem. Picking these sorts of bugs out has been pretty simple in every project I've worked on. I've had far more heartache from the bugs stemming from RAII-type mechanisms holding on to resources longer than they should, than I've had from fixing bugs caused by resource leaks or stale resource identifiers.
I respectfully disagree with leaks not being a problem.
Bring a formal proof that you won't go out of memory. Attach additional information on how you wrote an allocator that runs in constant time and does not risk taking it's sweet time to scan a huge area of memory. Sure, it's all O(n), but who cares if determining when you are going to hit the huge n case is equivalent to solving the halting problem.
Of course, at this point, the hassle simply means you don't use dynamic memory.
Even in the case that you're using an STL container, it's probably a hash table or tree data structure, and you're probably populating it at initialization time with a defined quantity of items. In that case, even if it's doing heap allocation it's effectively static allocation.
RAII on the other hand, totally.
Jonathan Blow has a good point about smart pointers being a poor solution tacked on the language. As it wraps your class in another class and becomes kinda ugly.
After using Java, Python, C# and other languages. Smart pointers aren't really that smart. I'm not saying garbage collection is the solution - but smart pointers aren't a silver bullet.
What is not smart about smart pointers? std::shared_pointer implements reference counting just as OP describes.
I clearly didn't say it was.
> They're often implemented poorly (the only good one being Go's) and they're slow.
Do you have any evidence to support that? From my experiences and tests C# has been on par with C++ [1]. Of course it might be slightly slower but not enough for me to dismiss it. Java I think is a little bit slower - but my problem with Java is its memory requirements.
> Garbage collection also necessitates a runtime environment to keep track of the data.
Assuming they do this in a separate thread and you have an OS that schedules threads/processes in a sane way and the GC doesn't need to interact with the main thread - you should never notice a performance hit in your application.
> What is not smart about smart pointers?
They don't track the actual memory usage. John Carmack implemented his own version of memory management for both Doom 3 [2] and Doom 3 BFG [3] presumably so he could get debugging information that isn't available with the C++11 smart pointers. I've implemented something similar to Doom 3's heap where I track the line and file of where the heap memory was allocated.
The one thing I've noticed about developers today is that they have become lazy. Yeah - smart pointers will work correctly in simple cases and 90-99% of the time but it was written by humans so it may have bugs in it. Most C++ developers today refuse to run valgrind because they just assume their program doesn't leak memory when using shared_ptr/unique_ptr. I have personally found memory leaks in pretty popular open source projects. I would have told them about it - but I've found most C++ communities to not welcome new people and their ideas.
[1] http://www.codeproject.com/Articles/212856/Head-to-head-benc...
[2] https://github.com/TTimo/doom3.gpl/blob/8047099afdfc5c973faa...
[3] https://github.com/id-Software/DOOM-3-BFG/blob/9c37079c16015...
Is this the same "Doom 3" that came out in 2004, a full seven-ish years before c++11.
[1] https://isocpp.org/wiki/faq/freestore-mgmt#ref-count-simple
But I am pretty biased, I loved reference counting, and ARC just made it more awesome. I want ownership, I point strongly. I don't care about ownership, I'll have a weak ref and that's it.