Как отмечалось в другом ответе, class A
не подлежит копированию, поскольку его член std::ifstream _file;
не подлежит копированию.
Но std::ifstream
является подвижным, и обычно ваш класс также будет подвижным, но , предоставляя пользовательский деструктор, предотвращает неявную генерацию конструктора перемещения и оператора назначения перемещения (см. Диаграмму здесь ).
Итак, шаг 1: Создатьваш класс можно перемещать, удаляя пользовательский деструктор (неявно созданный деструктор все равно будет делать то же самое).
В качестве альтернативы, если вы по какой-то причине хотите оставить деструктор, вам нужно попросить компилятор сгенерировать движениеконструктор и оператор присваивания перемещения:
A(A &&) = default;
A &operator=(A &&) = default;
Шаг 2. При добавлении экземпляра class A
в вектор переместите его вместо копирования:
A tempObj(f);
AList.emplace_back(std::move(tempObj));
// ^^^^^^^^^^ ^
В качестве альтернативы, создайте егопрямо в векторе:
AList.emplace_back(f);