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