Прошу прощения, если это было задано раньше, я не смог найти его в Интернете. Почему компилятор считает, что я пытаюсь вызвать конструктор копирования std::condition_variable
?Проблемы при создании общего указателя переменной условия
#include <iostream>
#include <utility>
#include <vector>
#include <memory>
#include <condition_variable>
using namespace std;
class A {
public:
A() = default;
A(A&&) = default;
A& operator=(A&&) = default;
A(const A&) = delete;
A& operator=(const A&) = delete;
};
int main() {
std::vector<std::shared_ptr<std::condition_variable>> m;
m.push_back(std::make_shared<std::condition_variable>(std::condition_variable{}));
// no complains here
std::vector<std::shared_ptr<A>> m_a;
m_a.push_back(std::make_shared<A>(A{}));
return 0;
}
Я получаю ошибку, что я пытаюсь использовать удаленный экземпляр конструктор std::condition_variable
.. Я думаю, что я пытаюсь спросить, почему конструктор движения не вызываются с этим вызовом make_shared
Аргументы для 'make_shared' используются Ф.О. построения объекта. В вашем случае вы передаете ему временное, которое соответствует сигнатуре конструктора копии. – Arunmu
@Arunmu На самом деле, он соответствует указателю конструктора перемещения – UldisK
@UldisK Нет конструктора перемещения для condition_variable. – Arunmu