STL容器和内存泄漏

tpa*_*ale 1 c++ stl

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)更普遍的是可以通过值返回容器的容器泄漏内存?(假设物体本身不泄漏)

Naw*_*waz 5

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::vectorstd::string确保不会泄漏内存.