質問: CParameter(); //C2280エラー発生個所 //何らかの画像処理が続く... } ``` エラーメッセージを抜粋したものが以下になります > > error C2280: 'CParameter::CParameter(const CParameter &)': > > 削除された関数を参照しようとしています > > コンパイラが 'CParameter::CParameter' をここに生成しました。 > > > 質問 -- コードのコメント中のナンバー毎に質問があります No1: どうしてコピーコンストラクタを追加するとC2280エラーが解消されるのか No2: コピーコンストラクタの追加で=defaultの場合はエラーが解消されないがNo1との違いは何か No3: デストラクタを除外するとコピーコンストラクタなしでもエラーが発生しない理由は何か 環境 -- 開発環境: Visual Studio 2015 14.0.25431.01 Update3 OpenCV: Ver3.4.3 参考にした情報 ------- エラーに関するMicrosoftのドキュメントページ%26rd%3Dtrue&view=vs-2019) C++のdefault/deleteの参考
回答: `std::unique_ptr` はコピーコンストラクタを持たないので `CParameter` もデフォルトコピーコンストラクタを利用できません。 No1とNo3については、C++11~C++14ではコピーコンストラクタ呼び出しが省略されることもされないこともあるため、質問のプログラムは環境依存です。 No2はデフォルトでないコピーコンストラクタは作成可能なので、コピーコンストラクタを宣言すればコンパイル時のエラーは回避出来て、(コピーコンストラクタを定義しなければ)リンク時にエラーになります。