Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.



I 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).



I don't understand your comment. Please try the following:

vec.reserve(10);

and report back how many allocations occur.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: