#include <iostream>
#include <utility>
#include <vector>
int i = 0;
struct A
{
A() : j( ++i )
{
std::cout<<"constructor "<<j<<std::endl;
}
A( const A & c) : j(c.j)
{
std::cout<<"copy "<<j<<std::endl;
}
A( const A && c) : j(c.j)
{
std::cout<<"move "<<j<<std::endl;
}
~A()
{
std::cout<<"destructor "<<j<<std::endl;
}
int j;
};
typedef std::vector< A > vec;
void foo( vec & v )
{
v.push_back( std::move( A() ) );
}
int main()
{
vec v;
foo( v );
foo( v );
}
Пример выше дает следующий результат:
constructor 1
move 1
destructor 1
constructor 2
move 2
move 1
destructor 1
destructor 2
destructor 1
destructor 2
Вопросы:
PS Я только что проверил, и объекты действительно размещены так, как ожидалось (1-й идет в позицию 0 в векторе, а 2-й - в позицию 1 в векторе)
PPS Если это важно, я используя gcc 4.3, и я компилирую программу следующим образом:
g++ n1.cpp -Wall -Wextra -pedantic -ansi -std=c++0x -O3