Я попытался скомпилировать некоторый код C++ с помощью VS2013, и unique_ptr::reset()
, похоже, не работает с make_unique()
; небольшой компилируемый фрагмент кода репродукции:
#include <memory>
using namespace std;
int main() {
unique_ptr<int[]> p = make_unique<int[]>(3);
p.reset(make_unique<int[]>(10));
}
Компиляция из командной строки:
C:\Temp\CppTests>cl /EHsc /W4 /nologo test.cpp
Это ошибки компилятора MSVC:
test.cpp(6) : error C2280: 'void std::unique_ptr<int [],std::default_delete<_Ty> >::reset<std::unique_ptr<_Ty,std::default_delete<_Ty>>>(_Ptr2)' : attempting to reference a deleted function with [ _Ty=int [] , _Ptr2=std::unique_ptr<int [],std::default_delete<int []>> ] C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\memory(16 23) : see declaration of 'std::unique_ptr<int [],std::default_delete<_Ty>>::rese t' with [ _Ty=int [] ]
Однако следующий код компилируется нормально:
p = make_unique<int[]>(10);
В чем причина такого поведения? Почему unique_ptr::operator=()
работает с make_unique()
, а unique_ptr::reset()
нет?