- 主题:构造函数打开文件怎么处理打开失败的情况
谢谢,我试试
【 在 z16166 的大作中提到: 】
: DictParser::DictParser(const std::string &path) {
: _fs.exceptions(ifstream::badbit);
: _fs.open(path);
: ...................
--
FROM 111.206.214.*
层主难道不是在很专业的引导你该如何缕清业务逻辑?
对别人来说,一个打开文件的异常处理可能真的不是很难,但是对于你这种发帖来问的小白,版友热心回答却被你定义成无理取闹。在我看来,你这根鸡巴毛实在是不可理喻
【 在 steven2012 的大作中提到: 】
: 咱能专业点么? 又不是很难
--
FROM 119.114.255.*
就不应该在构造函数里面做这个操作。
【 在 steven2012 的大作中提到: 】
: 如下的一个类:如何处理文件打开失败的情况,谢谢
: /**
: \* DictParser is used to parse a file
: \* it parse a line every time
: */
: class DictParser {
: public:
: ..................
--
FROM 124.126.138.*
一看就不专业,在构造函数内不要搞有可能失败的操作,搞个单独的func不行?
--
FROM 115.183.55.*
直接在DictParser内部或其他地方增加一个static factory方法,用于创建DictParser实例
factory方法内部判断存在文件再创建DictParser实例,否则返回nullptr
【 在 steven2012 的大作中提到: 】
: 我现在修改的就是不用构造函数打开,而是增加open打开判断;就是还是笨办法;有没有办法不改变源代码构造函数打开方式,怎么判断打开失败异常处理呢?!
: std::string path = "data/data.txt";
: //DictParser dp("data/data.txt"); //DictParser is used to parse a file 之前构造函数打开方式
: ...................
--
FROM 123.112.22.*
为啥记得以前说,不应该在构造/析构函数里抛出异常?
【 在 z16166 的大作中提到: 】
: throw,或者设置状态变量
: 前者是推荐的方式
--
FROM 101.224.254.*
你记错了
事实上,在构造函数中抛异常,是一个处理异常(<5%出现可能性)很优雅的方式
【 在 Madlee 的大作中提到: 】
: 为啥记得以前说,不应该在构造/析构函数里抛出异常?
:
--
FROM 125.119.96.*
构造函数里的标准做法是抛异常,这是B.S的书里,以及C++超级FAQ里等推荐的搞法
处理异常有点性能开销,所以异常主要用来处理少见的一些情况,如果频繁抛异常性能开销就大了,不合适
析构里不抛异常
贴个现成的
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-throw
【 在 Madlee 的大作中提到: 】
: 为啥记得以前说,不应该在构造/析构函数里抛出异常?
:
--
修改:z16166 FROM 123.118.191.*
FROM 123.118.191.*