我正在使用C
程序来控制电气测试系统。我们的团队最近经历了一次严重的内存泄漏,正在考虑为将来的项目切换到C++
。 C++
可以解决吗?
C ++可以避免内存泄漏吗?
答案 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!!!
}