我正在使用一个 C
程序来控制一个电气测试系统。我们的团队最近遇到了严重的内存泄漏问题,考虑在未来的项目中转向使用 C++
。那么,C++
是一个解决方案吗?
C++
有没有避免内存泄漏的好处呢?
我正在使用一个 C
程序来控制一个电气测试系统。我们的团队最近遇到了严重的内存泄漏问题,考虑在未来的项目中转向使用 C++
。那么,C++
是一个解决方案吗?
C++
有没有避免内存泄漏的好处呢?
C++
允许用户定义类型,在它们被销毁时运行代码。这意味着可以使用自动变量来管理分配的内存。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!!!
}
C
没有为您管理动态内存的功能,但是 C++
具有此类功能。这不应该是一个关于一个程序员能否编写没有内存泄漏的 C
代码和另一个程序员能否编写具有内存泄漏的 C++
代码的争论。这是关于 C++
具有帮助防止这些泄漏的功能。 - GalikC
具有与C++
一样出色的内存管理功能。毕竟它们都有Boehm GC
.... 我将删除这个答案并撤回我的“重新开放”的投票。如果C
程序员真的想相信C
和C++
一样拥有出色的内存管理,他们更加欢迎继续保持这种印象。 - GalikC++
修复糟糕的程序员,而是关于C++
具有特定功能。糟糕的程序员是一个转移话题 - 我们不知道他的代码是什么样子,他只是提到了内存泄漏问题。我认为真正的问题是讨论C
和C++
(或任何其他语言)是不明智的,因为太多人对自己钟爱的语言感到防御。 - Galik