编写内存安全的C++应用程序需要什么?

Jes*_*s H 9 c++ memory-management memory-safety

是否可以创建编码标准或使用可以证明可以消除C++中的任何内存管理错误的库?

我正在考虑类似Java的东西,例如在Java应用程序中悬挂指针是不可能的.

Ven*_*emo 9

是否可以创建编码标准或使用可以证明可以消除C++中的任何内存管理错误的库?

是的,不是.

即使您使用非常严格的标准,这样做也会限制您使用非常狭窄的C++语言子集.例如,Ten of Power(开发安全关键代码的规则)表示您应该完全禁用堆使用.然而,仅凭这一点并不能阻止您创建内存损坏.

我想如果对这个问题有一个确切的答案,那么几十年前这个行业就会解决这个问题,但我们在这里......

我不相信有一种明确的方法可以确保您的代码完全安全,但有一些最佳实践可以帮助您确保尽可能少的问题.

以下是一些建议:

  • 如前所述,完全不允许堆使用可能会帮助您摆脱所有内存管理问题,但它并不能完全解决问题,因为它不能帮助您避免例如.迷路指针写道.
  • 我建议你阅读关于三,五和零的规则,它解释了你需要照顾的一些东西.
  • 而不是自己管理内存,使用智能指针等shared_ptr,unique_ptr但当然,如果你愿意,你仍然可以滥用这些.(例如shared_ptr,如果您有循环引用,则无法帮助您......)
  • 使用内存检查工具valgrind,可以帮助您发现问题并验证您的代码是否没有错误.

即使您遵守任何编码标准或最佳实践,也可能并且将会发生错误.没有人保证你会安全.但是,通过遵循这些建议,您可以最大限度地减少错误的可能性和影响.