LINUX.ORG.RU

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

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

Почитай про move. У тебя случается аллокация как раз для временного вектора. Но когда ты его присваиваешь переменной, происходит тупо свап указателей. В итоге временный вектор становится пустым (точнее в нем буфер на 20 элементов от старого вектора, но size == 0, а через мгновение вызовется деструктор), а вектор в переменной использует его память.

Даже без move непонятно, зачем старому вектору делать аллокацию, если ты сделал reserve на 20 элементов, а присваиваешь вектор из 2 элементов. Даже если случится обычный copy (в C++ до 11 версии), переаллокация памяти не нужна.

Constexpr для этого совсем не нужен.

Исправление KivApple, :

Почитай про move. У тебя случается аллокация как раз для временного вектора. Но когда ты его присваиваешь переменной, происходит тупо свап указателей. В итоге временный вектор становится пустым (но он тут же уничтожается), а вектор в переменной использует его память.

Даже без move непонятно, зачем старому вектору делать аллокацию, если ты сделал reserve на 20 элементов, а присваиваешь вектор из 2 элементов. Даже если случится обычный copy (в C++ до 11 версии), переаллокация памяти не нужна.

Constexpr для этого совсем не нужен.

Исправление KivApple, :

Почитай про move. У тебя случается аллокация как раз для временного вектора. Но когда ты его присваиваешь переменной, происходит тупо свап указателей. В итоге временный вектор становится пустым (но он тут же уничтожается), а вектор в переменной использует его память.

Constexpr для этого совсем не нужен.

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

Почитай про move. У тебя случается аллокация как раз для временного вектора. Но когда ты его присваиваешь переменной, происходит тупо свап указателей. В итоге временный вектор становится пустым (но он тут же уничтожается), а вектор в переменной использует его память.