Неявно объявленный boost :: iostreams :: mapped_file_source устарел - PullRequest
0 голосов
/ 08 февраля 2020

Я определяю структуру следующим образом:

struct memory_dump {
    filesystem::path path;
    boost::iostreams::mapped_file_source mapped_file;
    memory_dump_type type;
    long long int offset;
};

Однако gcc генерирует следующее предупреждение:

warning: implicitly-declared ‘boost::iostreams::mapped_file_source& boost::iostreams::mapped_file_source::operator=(const boost::iostreams::mapped_file_source&)’ is deprecated [-Wdeprecated-copy]
   39 | struct memory_dump {
      |        ^~~~~~~~~~~

Это предупреждение появилось только после обновления моего Boost версия от 1.62.0 или около того 1.72.0. Я перезапустил предупреждение, но не нашел никакой информации об этом конкретном Boost классе, почему генерируется предупреждение и как его исправить. Моя цель - сохранить экземпляр mapped_file_source, чтобы я мог эффективно обращаться к содержимому отображенного в память файла.

1 Ответ

1 голос
/ 08 февраля 2020

Как вы можете видеть здесь: https://en.cppreference.com/w/cpp/language/copy_assignment

Генерация неявно определенного оператора назначения копирования не рекомендуется (начиная с C ++ 11), если T имеет Деструктор, объявленный пользователем, или конструктор копирования, объявленный пользователем.

Как в случае с Boost 1.72, как вы можете видеть:

    // Copy Constructor
    mapped_file_source(const mapped_file_source& other);

Этот конструктор копирования находится в строке 187 из boost\iostreams\device\mapped_file.hpp

...