C#coder刚刚编写了这个简单的C++方法来从文件中获取文本:
static std::vector<std::string> readTextFile(const std::string &filePath) {
std::string line;
std::vector<std::string> lines;
std::ifstream theFile(filePath.c_str());
while (theFile.good()) {
getline (theFile, line);
lines.push_back(line);
}
theFile.close();
return lines;
}
Run Code Online (Sandbox Code Playgroud)
我知道这段代码效率不高; 文本行在读取时复制一次,第二次在按值返回时复制.
两个问题:
(1)这段代码可以泄漏内存吗?(2)更普遍的是可以通过值返回容器的容器泄漏内存?(假设物体本身不泄漏)
while (theFile.good()) {
getline (theFile, line);
lines.push_back(line);
}
Run Code Online (Sandbox Code Playgroud)
忘记效率,这段代码不正确.它无法正确读取文件.请参阅以下主题以了解原因:
所以循环应该写成:
while (getline (theFile, line)) {
lines.push_back(line);
}
Run Code Online (Sandbox Code Playgroud)
现在这是正确的.如果您想提高效率,请首先分析您的应用程序.尝试查看占用大多数CPU周期的部分.
(1)这段代码可以泄漏内存吗?
没有.
(2)更普遍的是可以通过值返回容器的容器泄漏内存?
取决于容器中对象的类型.在您的情况下,对象的类型std::vector是std::string确保不会泄漏内存.
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |