3 ms·
Depending on move constructors scare the bajeezus out of me because I have no way of knowing if it's working properly. It's behavior is also implementation spec
by forrestthewoods 14y ago
Depending on move constructors scare the bajeezus out of me because I have no way of knowing if it's working properly. It's behavior is also implementation specific. Given the following test you'll get a variety of results depending on your platform.
struct Foo{...}
std::vector<Foo> vec;
for( int i = 0; i < 10; ++i) { vec.push_back( Foo() ); }
Results: 35 move / 25 copy / 10 move + 15 copy / 25 move.
It all depends on your compiler and STL implementation. Not knowing scares the hell out of me.
- shawn-butler 14y agoI don't understand your comment. Please try the following: vec.reserve(10); and report back how many allocations occur.
- CJefferson 14y agoI assume what you are saying is the following? * Compilers are introducing move as we move in C++11. If you compile your code in C++03 (or a compiler with partial C++11 support, no move). * The standard doesn't place a strict definition on how vectors are increased in size as you push_back. Of course, if you want to control the amount of space in a vector manually, rather than let your compiler decide, you can reserve in advance. Is your problem just with moving to C++11, or do you get different numbers (other than different numbers of moves) in a compiler with proper C++11 support (basically, the most recent version of everything).
- ksherlock 14y agoYou could also look into emplace_back() http://en.cppreference.com/w/cpp/container/vector/emplace_back http://en.cppreference.com/w/cpp/container/vector/emplace_ba...