4 ms·
1) No, it does not produce identical results. Most of the STD containers use copying, not pointers, as the article actually points out. That doesn't make his
by VikingCoder 14y ago
1) No, it does not produce identical results.
Most of the STD containers use copying, not pointers, as the article actually points out.
That doesn't make his larger point valid (I disagree with it, actually), but your argument is not technically correct.
- justinsb 14y agoThings that look like they use copying in C++ often don't use copying in the final output. Values are usually returned by reference, and many C++ compilers can often avoid a copy even when that's not the case (e.g. Return Value Optimization). Even if the compiler doesn't optimize everything away, copying is sometimes faster, always safer and always easier than passing around pointers. It's a big lesson I learned for C++ - write correct code first; profile; fix any real performance problems, rather than obsessing about my preconceived notions of what would be slow.
- VikingCoder 14y agoYeah, I pretty much agree with everything you're saying, but trust me, std::list really does work by copying the items, so your point was not technically correct.
- ArbitraryLimits 14y agoWell, if we're striving for technical correctness, std::list really works by invoking the assingment operator on the items. The original article is strictly correct when it says: > EDIT: Assume that the object to be contained in the list is non-Assignable as is the case with any non-trivial objects, for example those holding large memory buffers, file descriptors, handles etc. If the object is Assignable simple std::list<person> would do and there is no problem. Except that normal C++ programmers would deal with that by overriding the assigment operator on this class to copy buffer pointers or whatever as appropriate.
- rumcajz 14y agoTry copying a complex object with threads running inside it, open file descriptors being used etc. What does it mean, for example, to copy a running DB engine? Some objects are just non-copyable by principle.