我之所以比较这两个类,是因为它们都与其他东西相关联。std::basic_fstream必须与文件关联,而std::unique_lock必须与互斥锁关联。因此,提供open()方法似乎是合理的。尽管如此,std::unique_lock没有提供这样的方法。懒惰初始化无论如何都可以通过移动分配来执行。因此,提供open()方法似乎是多余的。另一方面,std::basic_fstream确实提供了open()方法。在C++11之前就存在了std::basic_fstream,它是执行延迟初始化的唯一方法。抛开向后兼容性考虑,std::basic_fstream::open()会被删除吗?或者它仍然需要存在,因为操作实际上可能会失败?注意,open (关联)操作总是成功的,std::unique_lock (不要与lock操作混淆)。
发布于 2015-11-26 15:22:36
你的最后一句话实际上包含一个提示:"open (关联)操作总是用std::unique_lock成功的“。这便于将开放性声明为类不变量,在构造函数中建立它,并在极少数失败时抛出异常。与文件相比:打开它们可能会失败,因此将open声明为类不变量在那里不起作用。
https://stackoverflow.com/questions/33932514
复制相似问题