STL emplace струтктуры с некопируемыми членами

Имею код:

struct A{
    std::atomic<int> atomic{};
};

int main() {
    std::vector<A> vector;
    vector.emplace_back();

    return 0;
}

И ошибку:

use of deleted function ‘A::A(A&&)’ ::new(static_cast(__p)) _T1(std::forward<_Args>(__args)...); }

use of deleted function ‘std::atomic::atomic(const std::atomic&)

Не могу понять, откуда в этом коде попытки вызова конструктора копирования std::atomic. Как всё таки emplace value с noncopyable members?


Ответы (1 шт):

Автор решения: user7860670

Никак. При добавлении нового элемента вектор может выделить новый, расширенный, буфер, в который будут копироваться / перемещаться существующие элементы. Соответственно если конструкторы копирования / перемещения не доступны, то этот код работать не будет. Используйте какой-нибудь другой контейнер, который не требует копирования / перемещения существующих элементов.

→ Ссылка