memset 等函数不应作用于非 POD 对象
13.4 ID_nonPODFilling
memset、memcpy、memmove 等具有填充功能的函数不应作用于非“POD 类型”的对象,否则会破坏其数据的内在关系。
本规则是 ID_nonPODBinaryCast 的特化。
示例:
class A {
....
public:
virtual ~A();
};
void foo(A& a) {
memset(&a, 0, sizeof(a)); // Non-compliant, the ‘vfptr’ is corrupted
}
例中 memset 填充非 POD 对象,其虚函数表指针会被破坏,造成严重的运行时错误。