我写了一个小的坐标类来处理 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
—— 它会将指针的大小(在我的 x86 Intel 机器上是 4 个字节)从 this
指向的位置开始的字节清零.这是一个坏习惯:当对复杂类使用 memset
时,您还会将虚拟指针和指向虚拟基的指针清零。而是这样做:
template <class T>
class vector2
{
public:
// use initializer lists
vector2() : x(0), y(0) {}
T x;
T y;
};
关于c++ - C memset 似乎没有写给每个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742415/