Ссылка Well, how does the custom deleter of std::unique_ptr work?станд :: unique_ptr пользовательских Deleter
Конструктор
std::unique_ptr<ErrorHandling> error_;
RecursiveDescentParser::RecursiveDescentParser(std::string inputStream, bool fileService,
boost::optional<std::string> filePathName, std::ofstream &writer){
if (fileService == true){
error_(new ErrorHandling(fileService, writer)); <---- compiler error
}
else{
error_(new ErrorHandling(fileService, std::ofstream())); <---- compiler error
}
}
Compiler ошибка
Error 1 error C2247: 'std::default_delete<_Ty>::operator()' not accessible because 'std::unique_ptr<_Ty>' uses 'private' to inherit from 'std::_Unique_ptr_base<_Ty,_Dx,_Empty_deleter>'
Причина ошибки описанной here.
Я решил так 'std::default_delete<_Ty>::operator()
является private
, потому что дочерний класс (std::unique_ptr
в данном случае) указал private inheritance
, что я хотел бы написать мой собственный Deleter. Проблема в том, что мне слишком неудобно синтаксис и нотация для успеха.
Является ли деструктор 'ErrorHandling' объявленным' private'? –
Я фактически не объявлял деструктор (синтезированный) и формально объявлял его, но ошибка компилятора осталась. – Mushy