是否可以创建编码标准或使用可以证明可以消除C++中的任何内存管理错误的库?
我正在考虑类似Java的东西,例如在Java应用程序中悬挂指针是不可能的.
是否可以创建编码标准或使用可以证明可以消除C++中的任何内存管理错误的库?
是的,不是.
即使您使用非常严格的标准,这样做也会限制您使用非常狭窄的C++语言子集.例如,Ten of Power(开发安全关键代码的规则)表示您应该完全禁用堆使用.然而,仅凭这一点并不能阻止您创建内存损坏.
我想如果对这个问题有一个确切的答案,那么几十年前这个行业就会解决这个问题,但我们在这里......
我不相信有一种明确的方法可以确保您的代码完全安全,但有一些最佳实践可以帮助您确保尽可能少的问题.
以下是一些建议:
如前所述,完全不允许堆使用可能会帮助您摆脱所有内存管理问题,但它并不能完全解决问题,因为它不能帮助您避免例如.迷路指针写道.
我建议你阅读关于三,五和零的规则,它解释了你需要照顾的一些东西.
而不是自己管理内存,使用智能指针等shared_ptr
,unique_ptr
但当然,如果你愿意,你仍然可以滥用这些.(例如shared_ptr
,如果您有循环引用,则无法帮助您......)
使用内存检查工具valgrind
,可以帮助您发现问题并验证您的代码是否没有错误.
即使您遵守任何编码标准或最佳实践,也可能并且将会发生错误.没有人保证你会安全.但是,通过遵循这些建议,您可以最大限度地减少错误的可能性和影响.