Что такое multimap :: emplace () и move ()? - PullRequest
11 голосов
/ 29 марта 2011

Я просматривал документ MSDN о multimap и обнаружил, что в нем есть функция-член multimap :: emplace ().Ниже приведен пример этой функции-члена.

int main( ) {
   using namespace std;
   multimap<int, string> m1;
   pair<int, string> is1(1, "a");

   m1.emplace(move(is1));
}

Кажется, что emplace() и move() - это C ++ 0x.Может кто-нибудь объяснить их мне?Я читал о move(), но я действительно не понимаю, что он делает (под капотом).

1 Ответ

16 голосов
/ 29 марта 2011

Уплотнение легче понять с помощью векторов. my_vector.emplace_back(1, 2, 3) - это эффективный ярлык для my_vector.push_back(some_type(1, 2, 3)). Вместо копирования объекта на месте, теперь можно использовать любой конструктор для создания на месте, что позволяет сохранить создание, копирование (или перемещение) и уничтожение временного объекта. Питание осуществляется при совершенной пересылке .

std::move(expression) - это, по сути, приведение к xvalue , которое эффективно позволяет всему выражению быть привязанным к rvalue-ссылке. Обычно вы делаете это, чтобы включить воровство ресурсов из именованных объектов, которые вас больше не интересуют, потому что они все равно скоро будут уничтожены.

...