Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Introduction

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 23. Boost.Move

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
[Note] Note

Первые 3 главы адаптированы из статьиКраткое введение в ссылки на значениеГовард Э. Хиннант, Бьярн Страуструп и Бронек Козики

Копирование может быть дорогостоящим. Например, для векторов<v2=v1>обычно требуется вызов функции, выделение памяти и цикл. Это, конечно, приемлемо, когда нам действительно нужны две копии вектора, но во многих случаях мы этого не делаем: мы часто копируем<vector>из одного места в другое, просто чтобы перейти к перезаписи старой копии. Подумайте:

template <class T> void swap(T& a, T& b)
{
   T tmp(a);   // now we have two copies of a
   a = b;      // now we have two copies of b
   b = tmp;    // now we have two copies of tmp (aka a)
}

Но мы не хотели иметь никаких копий a или b, мы просто хотели поменять их. Попробуем еще раз:

template <class T> void swap(T& a, T& b)
{
   T tmp(::boost::move(a));
   a = ::boost::move(b);
   b = ::boost::move(tmp);
}

Это<move()>придает своей цели ценность ее аргумента, но не обязано сохранять ценность ее источника. Таким образом, для<vector>,<move()>можно было бы разумно ожидать, чтобы оставить свой аргумент в качестве вектора нулевой емкости, чтобы избежать необходимости копировать все элементы. Иными словами,ход является потенциально разрушительной копией.

В этом конкретном случае мы могли бы оптимизировать обмен по специализации. Однако мы не можем специализировать каждую функцию, которая копирует большой объект непосредственно перед его удалением или перезаписью. Это было бы неуправляемо.

В C++0x семантика движения реализуется с введением ссылок на rvalue. Они позволяют нам реализовать<move()>без многословия или накладных расходов.Boost.Move— это библиотека, которая предлагает инструменты для реализации семантики перемещения не только в компиляторах с<rvalue references>, но и в компиляторах, соответствующих C++03.


PrevUpHomeNext

Статья Introduction раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 23. Boost.Move может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 23. Boost.Move ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:56:32/0.027906179428101/1