Информация об изменениях

Сообщение Re[19]: попинайте пожалуйста резюме от 28.05.2021 7:49

Изменено 28.05.2021 7:55 Максим

Re[19]: попинайте пожалуйста резюме
PM>>
PM>>int main()
PM>>{
PM>>    my_vector<std::string> vec;
PM>>    vec.push_back("hallo welt! the string is longer than 24 characters to run over SSO"); 
PM>>    for (int i = 0; i <1000; ++i)
PM>>    {
PM>>        vec.push_back(vec[0]);
PM>>    }
PM>>}
PM>>

Тё>В чём запинка?

Тут много может быть сюрпризов. Ну например, такой вариант некорректной работы. vec[0] возвращает ссылку (https://en.cppreference.com/w/cpp/container/vector/operator_at) на нулевой объект, далее его нужно вставить в вектор. Во время push_back вы видите, что нижележащий массив мал по размеру, вы создаете новый большего размера, а старую память отпускаете (и ее в этот момент кто-то начинает использовать в своих целях). После этого вы начинаете вставлять в новый массив то, что находится по ссылке vec[0]. Но проблема в том, что там сейчас могут быть совсем другие данные. И подобных нюансов, я уверен сотни. Не даром эти контейнеры десятилетиями вылизывают.
Re[19]: попинайте пожалуйста резюме
PM>>
PM>>int main()
PM>>{
PM>>    my_vector<std::string> vec;
PM>>    vec.push_back("hallo welt! the string is longer than 24 characters to run over SSO"); 
PM>>    for (int i = 0; i <1000; ++i)
PM>>    {
PM>>        vec.push_back(vec[0]);
PM>>    }
PM>>}
PM>>

Тё>В чём запинка?

Тут много может быть сюрпризов. Ну например, такой вариант некорректной работы. vec[0] возвращает ссылку (https://en.cppreference.com/w/cpp/container/vector/operator_at) на нулевой объект, далее его нужно вставить в вектор. Во время push_back вы видите, что нижележащий массив мал по размеру, вы создаете новый большего размера, а старую память отпускаете (и ее в этот момент кто-то начинает использовать в своих целях). После этого вы начинаете вставлять в новый массив то, что находится по ссылке vec[0]. Но проблема в том, что там сейчас могут быть совсем другие данные. И подобных нюансов, я уверен сотни. Не даром эти контейнеры десятилетиями вылизывают.

PM>Как бы вы ответили, например на вопрос "Должен ли shared_ptr быть потокобезопасным. И если да, то какой memory_order использовать для счетчика ссылок?"


Дюже неприятно стало когда представил, что у меня такое на собеседовании спрашивают Гадость просто