Я заметил ошибку при попытке скопировать unique_ptr
(например, назначить один уникальный указатель на другой) являетсяВыполнение const unique_ptr, а затем попытка std :: move from дает такую же ошибку, как если бы вы пытались получить доступ к конструктору копирования
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;
}
это нормально, так как unique_ptr
не имеет конструктор копирования. Вы не копируете с уникальных указателей, чтобы переместить (передать право собственности на указатель) между ними.
Интересно (ОК, возможно, нет), этот код вызывает ту же ошибку. Теперь я знаю, что это неверно (я объявил первый 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 move не является допустимым кандидатом – Sopel
Именно поэтому' unique_ptr' превосходит 'auto_ptr'. :-) 'auto_ptr' был бы скомпилирован здесь и молча изменил значение const. –
@Sopel, извинения, не следуя тому, что вы написали. – Prof