История изменений
Исправление PRN, (текущая версия) :
кстати, этот полимофрный вариант можно будет как есть без изменения данных копировать/перемещать?
pmr версия - это, вроде как, частичная специализация шаблона полиморфным аллокатором. Все остальное работает «из коробки», просто вместо кучи буфер. Копирование копипастит данные (может даже в новый аллокатор), мув просто переприсывает указатель. Пока буфер цел, мув работает.
Вариант с кучей требует всё же аллокаций в конструктре копирования, в то время, когда можно было обойтись быстрым memcpy
Если конструктор есть, он должен быть вызван, memcpy
тут не поможет. Максимум может быть вызвано в конструкторе.
А реализация move-семантики в c++ довольно сложна в использовании - очень легко можно получить код менее эффективный чем с копированием
Да ладно) Расставил двойной амперсенд где надо и мувнул где надо, делов то)). Единственное требование на класс - это наличие «пустого» состояния. Для классов со сложными инвариантами это может быть проблемой.
NRVO почти никогда толком не работает
Начиная с 17-х copy elision
обязателен. В худшем случае мувнеться.
Исходная версия PRN, :
кстати, этот полимофрный вариант можно будет как есть без изменения данных копировать/перемещать?
pmr версия - это, вроде как, частичная специализация шаблона полиморфным аллокатором. Все остальное работает «из коробки», просто вместо кучи буфер. Копирование копипастит данные (может даже в новый аллокатор), мув просто переприсывает указатель. Пока буфер цел, мув работает.
Вариант с кучей требует всё же аллокаций в конструктре копирования, в то время, когда можно было обойтись быстрым memcpy
Если конструктор есть, он должен быть вызван, memcpy
тут не поможет. Максимум может быть вызвано в конструкторе.
А реализация move-семантики в c++ довольно сложна в использовании - очень легко можно получить код менее эффективный чем с копированием
Да ладно) Расставил двойной амперсенд где надо и мувнул где надо, делов то)).
NRVO почти никогда толком не работает
Начиная с 17-х copy elision
обязателен. В худшем случае мувнеться.