0からの、超初心者C++相談室at TECH0からの、超初心者C++相談室 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト953:デフォルトの名無しさん 24/10/29 10:21:38.62 G3xxa4mJ.net >>945 それは std::atomic<bool> という型であって、bool型ではないから。 load()でboolに変換されているということだね。 954:はちみつ餃子 24/10/29 11:42:59.70 IsdOq2r9.net >>945 インスタンス変数って何? 文脈から推測するとデータメンバのことかな? だとするとこんな感じのことだと思って説明するよ。 class foo { std::atomic<bool> m_added = false; public: bool isAdded() { return m_added; } }; こういう書き方だと std::atomic<bool> m_added = false; はコピー初期化という扱いになる。 なのでコピーコンストラクタが必要だが std::atomic にはコピーコンストラクタが無いのでコピーコンストラクタがないという旨がエラーメッセージとして表示される。 解決方法としてはメンバ初期化子リストで初期化すればいい。 これなら直接初期化の扱いになる。 class foo { std::atomic<bool> m_added; public: foo(void) : m_added(false) {} bool isAdded() { return m_added.load(); } }; C++17 以降だとコピー省略が保証される (かつコピーコンストラクタの存在を要求しない) 場面なので C++17 以降を使うのなら修正は必要ない。 std::atomic<T> には operator T() があるので std::atomic<bool> から bool へは変換できて、そのときの効果は std::atomic<bool>::load を呼び出すのと同じ。 暗黙に変換するのでこの部分は本来なら問題ないはず。 ここを修正してエラーが出なくなったというのは何か誤解してると思う。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch