如果您使用未初始化的类成员,Visual Studio 2012 C++ 编译器中是否有一个选项可以使其发出警告?
RTC 检查与托管 C++ (/clr) 不兼容
如果您使用未初始化的类成员,Visual Studio 2012 C++ 编译器中是否有一个选项可以使其发出警告?
RTC 检查与托管 C++ (/clr) 不兼容
什么样的数据成员?是指针成员变量还是自动调用其构造函数的成员变量?
这真的取决于作者是否有足够的经验来对指针偏执并像鹰一样观察它们的初始化、赋值和取消引用以确保它是安全的。没有编译器或静态分析器可以代替称职的程序员来确保安全地使用指针。
如果可能,您基本上希望在编译时找到这些问题,并且仅作为最后的手段在运行时找到这些问题。
对于编译时工具,您确实有一些可能对您有所帮助的选项:
Visual Studio 附带的静态分析器可以在未先检查指针的情况下发出警告。但它并没有对指针类成员给予同样的重视。我已经看到了一个名为 CppCheck 的第三方静态分析器来进行检查。Coverity(另一个静态分析器)也可能会这样做。啊,但是等等,Coverity 不适用于托管代码(我上次检查过)。而且它太贵了,你可能不得不卖掉你的房子,你的邻居的房子来支付它,并让一个覆盖工程师到你的办公室花 3 天时间安装它,然后需要 24 小时运行分析.
对于运行时检查,我不知道 RTC 与托管代码有什么替代方案。但是,尽量减少暴露给 /clr 开关的纯本机代码的数量是非常非常非常明智的。几年前,一些程序员为我们最大的项目(它有数百个文件)的产品启用了它。尽管在项目的数百个文件中只有 4 或 5 个文件使用了托管代码,但他仍然为其他数百个纯原生文件打开了开关。结果,在我们扭转了这种愚蠢之前,多年来发生了数千次撞车事故。
因此,将您的代码放在清晰的可管理层中。将托管 C++ 代码与纯本机 C++ 代码分开,在 Visual Studio 中仅打开托管文件上的 /clr 开关。
并且尽可能使用静态分析工具。