LINUX.ORG.RU

История изменений

Исправление PRN, (текущая версия) :

кстати, этот полимофрный вариант можно будет как есть без изменения данных копировать/перемещать?

pmr версия - это, вроде как, частичная специализация шаблона полиморфным аллокатором. Все остальное работает «из коробки», просто вместо кучи буфер. Копирование копипастит данные (может даже в новый аллокатор), мув просто переприсывает указатель. Пока буфер цел, мув работает.

Вариант с кучей требует всё же аллокаций в конструктре копирования, в то время, когда можно было обойтись быстрым memcpy

Если конструктор есть, он должен быть вызван, memcpy тут не поможет. Максимум может быть вызвано в конструкторе.

А реализация move-семантики в c++ довольно сложна в использовании - очень легко можно получить код менее эффективный чем с копированием

Да ладно) Расставил двойной амперсенд где надо и мувнул где надо, делов то)). Единственное требование на класс - это наличие «пустого» состояния. Для классов со сложными инвариантами это может быть проблемой.

NRVO почти никогда толком не работает

Начиная с 17-х copy elision обязателен. В худшем случае мувнеться.

Исходная версия PRN, :

кстати, этот полимофрный вариант можно будет как есть без изменения данных копировать/перемещать?

pmr версия - это, вроде как, частичная специализация шаблона полиморфным аллокатором. Все остальное работает «из коробки», просто вместо кучи буфер. Копирование копипастит данные (может даже в новый аллокатор), мув просто переприсывает указатель. Пока буфер цел, мув работает.

Вариант с кучей требует всё же аллокаций в конструктре копирования, в то время, когда можно было обойтись быстрым memcpy

Если конструктор есть, он должен быть вызван, memcpy тут не поможет. Максимум может быть вызвано в конструкторе.

А реализация move-семантики в c++ довольно сложна в использовании - очень легко можно получить код менее эффективный чем с копированием

Да ладно) Расставил двойной амперсенд где надо и мувнул где надо, делов то)).

NRVO почти никогда толком не работает

Начиная с 17-х copy elision обязателен. В худшем случае мувнеться.