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

Сообщение Re: LRU cache, предложения и замечания от 15.04.2019 22:50

Изменено 15.04.2019 23:00 rg45

Re: LRU cache, предложения и замечания
Здравствуйте, kaa.python, Вы писали:

KP>Для собственных нужд накидал LRU-cache, который вроде делает то, что мне нужно и так как мне нужно. Но так как я не часто пишу на C++ именно что библиотеки, а в то же время написание библиотек вообще сильно оттедельный навык, у меня есть некоторые сомнения в том, что все реализовано в соответствии с современными веяниями. Сам кеш тут, минимальный поддерживаемый стандарт C++11. Буду благодарен за дополнения и замечания


        _list.emplace_front( std::forward<key_type>( key ),
                             std::forward<value_type>( value ) );
        _map.emplace( std::forward<key_type>( key ), _list.begin() );


Сильно вдумчиво не изучал, но глаз зацепился вот за этот фрагмент кода: ты повторно форвардишь key. Это не есть хорошо, поскольку после первого же раза от объекта может остаться один только панцирь. Ну и еще, я бы в подобном случае для реализации итератора использовал бы boost::iterator_adaptor — писанины меньше и результат надежнее.
Re: LRU cache, предложения и замечания
Здравствуйте, kaa.python, Вы писали:

KP>Для собственных нужд накидал LRU-cache, который вроде делает то, что мне нужно и так как мне нужно. Но так как я не часто пишу на C++ именно что библиотеки, а в то же время написание библиотек вообще сильно оттедельный навык, у меня есть некоторые сомнения в том, что все реализовано в соответствии с современными веяниями. Сам кеш тут, минимальный поддерживаемый стандарт C++11. Буду благодарен за дополнения и замечания


        _list.emplace_front( std::forward<key_type>( key ),
                             std::forward<value_type>( value ) );
        _map.emplace( std::forward<key_type>( key ), _list.begin() );


Сильно вдумчиво не изучал, но глаз зацепился вот за этот фрагмент кода: ты повторно форвардишь key. Это не есть хорошо, поскольку после первого же раза от объекта может остаться один только панцирь. Ну и еще, я бы в подобном случае для реализации итератора использовал бы boost::iterator_adaptor — писанины меньше и результат надежнее.

P.S. Я не очень удачно выразился. Проблема, собственно, не в повторном форвардинге, а в том, что после форвардинга объект еще как-то используется.