これまでに質問されている場合は謝罪し、オンラインでは見つかりませんでした。なぜコンパイラは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'の引数は、オブジェクトを構築するfoが使用されています。あなたのケースでは、コピーコンストラクタシグネチャと一致する一時的なものを渡しています。 – Arunmu
@Arunmu実際には、移動コンストラクタの署名と一致します – UldisK
@UldisK condition_variableのための 'move constructor 'はありません。 – Arunmu