c++ - 使用 C++ 进行面向对象设计中的内存管理

标签 c++ memory-management memory-leaks

我正在开发一个项目,该项目基本上涉及解析和存储有关大量目录和文件的信息,并为我提供新添加的文件数量的摘要(更像是“文件嗅探器”)。

我的程序的结果是,当我在大约 30 GB 的数据上运行它时,我看到分配的内存(工作集)增长到 700,000 K(内存泄漏)。

在我的代码中,我使用了大量的对象创建和销毁。最常用的物体相当重。

关于如何减少内存使用的任何建议。如果有任何不清楚的地方,请告诉我。

代码的主要部分是这样的:

void analyzeHelper(std::string path){
    directory *dir=new directory();
    if(!dir->DirectoryExists(path))
        return;
    dir->SetCurrentDirectory(path);
    summary=new Summary();                        // Heavy class
    for(size_t i=0;i<dir->GetDirectories("*.*").size();i++)
        summary->addChild(dir->GetDirectories("*.*")[i]);
    for(size_t i=0;i<dir->GetFiles().size();i++)
        summary->addFile(Path<std::string>::toLower(dir->GetFiles()[i]));
    summary->setLocation(path);
    delete dir;
    compare(); //  here I run a comparision of the same directory with its previous version
    createMetadata(); // create an xml file to store the current version
    int size=summary->childSize();
    std::vector<std::string> _children=summary->getChildren();
    delete summary;
    for(int i=0;i<size;i++)
    {
        FileSniffer *f=new FileSniffer(xmlroot);
        f->setRoot(dirRoot,path,remroot);
        f->analyzeHelper(_children[i]);
        delete f;
    }

}

一个相关问题:不断复制 vector 有多糟糕? (正如我在代码中对“_children”所做的那样)

最佳答案

如果目录不存在,则存在内存泄漏:

directory *dir=new directory();
if(!dir->DirectoryExists(path))
    return;

dir 必须在返回之前删除(智能指针将简化 dir 的管理)或仅在堆栈上分配 dir:

directory dir;
if(!dir.DirectoryExists(path))
    return;

关于c++ - 使用 C++ 进行面向对象设计中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9281700/

相关文章:

c++ - 如何将 “= default”与具有主体的构造函数一起使用?

c++ - 在初始化列表中使用此指针

c++ - 在 C++ 中,对象是如何存储在内存中的?

Swift 的内存管理

memory-leaks - dlopen 中 valgrind 报告的内存泄漏?

c++ - 数组中对象的范围

c++ - bb10 级联清除 GroupDataModel 崩溃

c++ - tensorflow和bazel "undefined reference to"编译错误

javascript - 在紧凑的 JavaScript 循环中使用 var 会增加与内存相关的开销吗?

jakarta-ee - Java EE 对象监控工具