【发布时间】:2009-04-12 20:56:34
【问题描述】:
我写了一个小坐标类来处理 int 和 float 坐标。
template <class T>
class vector2
{
public:
vector2() { memset(this, 0, sizeof(this)); }
T x;
T y;
};
然后在 main() 我做:
vector2<int> v;
但根据我的 MSVC 调试器,只有 x 值设置为 0,y 值未触及。我以前从未在模板类中使用过 sizeof() ,这可能是造成问题的原因吗?
【问题讨论】:
-
好的,好的,我确信,memset 很糟糕(至少在这种情况下)。 ;) 但是关于它覆盖 vtable 的能力的部分有点吓人。谢天谢地,我现在学会了简单的方法。
-
memset() 在 C++ 中通常是个坏主意。忘记它的存在。
-
调试一个在运行时被意外修改的vtable一点也不好玩……至少这个错误可能会在第一次调用虚函数时失败,因为vtable指针本身是NULL。
-
不要使用 memset()。但如果你至少使用正确的尺寸。 sizeof(*pointer) 而不是 sizeof(pointer)。 sizeof(this) 在 32 位机器上为 4 个字节,在 64 位机器上为 8 个字节,与 sizeof(*this) 无关。
标签: c++ templates sizeof memset