“Handling map of files in c++”说不,一个人应该使用std::map<std::string, std::ofstream*>
,但这会导致new
和delete
行动,这不是那么整洁。
自“Is std::ofstream movable?是的!”并且可以“std::map<>::insert using non-copyable objects and uniform initialization”,是否可以使用ofstream
处理std::map
的集合?因此,人们不会担心关闭文件流,而delete
会释放内存。
我可以在使用std::map<std::string, std::ofstream>
时妥协,只创建,使用(写入)和关闭,而不是复制它。
答案 0 :(得分:2)
是的,这是可能的。请参阅下面的示例代码。
我可以在使用
std::map<std::string, std::ofstream>
时妥协,只创建,使用(写入)和关闭,而不是复制它。
它们不可复制,因此在您的最终评论中,您是正确的,您将无法复制它。如果那是你想做的事情,你可以移动分配。
#include <iostream>
#include <fstream>
#include <map>
int main()
{
std::map<std::string, std::ofstream> map;
map.emplace("foo", std::ofstream("/tmp/foo"));
map.emplace("bar", std::ofstream("/tmp/bar"));
map["foo"] << "test";
map["foo"].flush();
std::ifstream ifs("/tmp/foo");
std::string data;
ifs >> data;
std::cout << data << '\n';
return 0;
}
<强>输出:强>
测试