Всем привет, как обычно писал код на одной из библиотек и там было макроопределение:
#define OSTREAM std::ostream
В примерах было показано использование типа такого:
...
OSTREAM *ost = new std::ofstream("file.txt", std::ios::app);
...
delete ost;
...
Все как бы работает, я решил переделать это под std::unique_ptr, если использовать вот таким образом то все работает:
std::unique_ptr < OSTREAM > pstm (new std::ofstream("file.txt", std::ios::app));
но нужно было отложить инициализацию и сделать что то вроде вот этого:
std::unique_ptr < OSTREAM > pstm;
pstm = new std::ofstream("file.txt", std::ios::app);
Получил вот такие ошибки:
error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::ofstream *' (or there is no acceptable conversion)
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\memory(2338): note: could be 'std::unique_ptr<std::ostream,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)'
1> with
1> [
1> _Ty=std::ostream
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\memory(2276): note: or 'std::unique_ptr<std::ostream,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(std::unique_ptr<_Ty,std::default_delete<_Ty>> &&) noexcept'
1> with
1> [
1> _Ty=std::ostream
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\memory(2202): note: or 'std::unique_ptr<std::ostream,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(std::nullptr_t) noexcept'
1> with
1> [
1> _Ty=std::ostream
1> ]
1>d:\projects\custom_deleter\custom_deleter.cpp(19): note: while trying to match the argument list '(std::unique_ptr<std::ostream,std::default_delete<_Ty>>, std::ofstream *)'
1> with
1> [
1> _Ty=std::ostream
1> ]
Пробовал добавлять кастомный делетер, но ничего с этого не вышло и эта тема осталась для меня не раскрыта, я конечно сделал по старинке с вызовом delete, но все же хочу понять как сие блюдо приготовить?
Спасибо.