【发布时间】:2013-03-30 19:49:41
【问题描述】:
参考Well, how does the custom deleter of std::unique_ptr work?
构造函数
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
}
}
编译器错误
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,我将编写自己的自定义删除器。问题是我对成功的语法和符号太不舒服了。
【问题讨论】:
-
ErrorHandling的析构函数是否声明了private? -
我实际上没有声明一个析构函数(合成的)并正式声明了一个,但编译器错误仍然存在。
标签: c++ unique-ptr