unique_ptr
をコピーしようとしたときにエラーが発生しましたunique_ptr
は、コピーコンストラクタが定義されていないとして、罰金だconst unique_ptrを作成してstd :: moveを実行しようとすると、コピーコンストラクタにアクセスしようとしたときと同じエラーが発生する
Error C2280 std::unique_ptr<int,std::default_delete attempting to reference a deleted function ptrTest c:\ptrtest\main.cpp 7
#include <memory>
int main()
{
std::unique_ptr<int> a = std::make_unique<int>(2);
std::unique_ptr<int> b = a;
}
です。あなたは一意のポインタからそれらの間の移動(ポインタの所有権を移す)からコピーしません。
興味深いことに(OKではないかもしれません)、このコードは同じエラーをスローします。今私はそれが有効ではないことを知っている(私は最初のunique_ptr
不変オブジェクトとして宣言した)、エラーメッセージは、コピーコンストラクタを呼び出すしようとしていることを意味します。あれは正しいですか?
#include <memory>
int main()
{
const std::unique_ptr<int> a = std::make_unique<int>(2);
std::unique_ptr<int> b = std::move(a);
}
'a'がconstであるため、コンストラクタは有効な候補ではありません – Sopel
これは' unique_ptr'が 'auto_ptr'よりも優れている理由です。 :-) 'auto_ptr'はここでコンパイルされ、静かにconst値が変更されます。 –
@ソペル、謝罪、あなたが書いたことに従わない。 – Prof