最近遇到一个比较诡异的问题,内存池对象经常在出刷的时候挂掉
最后发现这些对象的虚函数表都是空的
然后各种调试发现对象获取之后调用了memset
而这些类都是继承类。
总结如下:
memset会把对象指针开始到对象size大小的空间全部置0,因此如果这个对象的类型是继承自某个类时,他的虚函数表也会被清理掉。
因此再c++中尽量不要使用memset处理对象,而应该调用对象的构造函数或者初始化函数。
最近遇到一个比较诡异的问题,内存池对象经常在出刷的时候挂掉
最后发现这些对象的虚函数表都是空的
然后各种调试发现对象获取之后调用了memset
而这些类都是继承类。
总结如下:
memset会把对象指针开始到对象size大小的空间全部置0,因此如果这个对象的类型是继承自某个类时,他的虚函数表也会被清理掉。
因此再c++中尽量不要使用memset处理对象,而应该调用对象的构造函数或者初始化函数。