C ++在避免内存泄漏方面比C更好吗?

时间:2019-02-16 19:23:38

标签: c++ c memory-leaks

我正在使用C程序来控制电气测试系统。我们的团队最近经历了一次严重的内存泄漏,正在考虑为将来的项目切换到C++C++可以解决吗?

C ++可以避免内存泄漏吗?

1 个答案:

答案 0 :(得分:3)

是的。 C++允许用户定义的类型在销毁代码时运行代码。这意味着 automatic 变量可用于管理分配的内存。

请参见(例如)std::unique_ptr中的 smart 指针,该指针在超出范围时会自动清除内存。

此外,std::unique_ptr纯粹是语法糖,因此使用原始指针不会增加任何开销,编译器的优化器剥离了所有内容,从而生成了几乎与手工手工分配相同的代码。

此外,不仅可以自动清除内存,还可以使用std::unique_ptr为您关闭文件!

struct FILE_closer{void operator()(std::FILE* fp) const { if(fp) std::fclose(fp); }};
using unique_FILE = std::unique_ptr<FILE, FILE_closer>;

void func()
{
    // this will close when it goes out of scope
    unique_FILE fp(std::fopen("filename.txt", "w"));

    std::fprintf(fp.get(), "hello %s", "world");

    // no need to close fp here!

}

自动清除自身的字符字符串!

struct malloc_deleter{void operator()(void* p) const { std::free(p); }};
using char_uptr = std::unique_ptr<char, malloc_deleter>;

void func()
{
    char_uptr s((char*) malloc(128));

    std::sprintf(s.get(), "Hello World Number %d\n", 5);

    std::printf(s.get());

    // no need to call free(s) here!!!
}