c++ - C memset 似乎没有写给每个成员

标签 c++ templates sizeof memset

我写了一个小的坐标类来处理 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/

相关文章:

c - 获取指针数据的大小

c++ - C++ 中的 Sizeof 以及如何计算指针长度?

c++ - 树莓派SFML播放音频

c++ - 将 Rcpp 与 C 代码链接起来以进行自适应大都会拒绝采样

c++ - 实现具有迭代器支持的通用固定大小数组

c++ - 在 C++ 中使用模板进行矩阵乘法

C:在 sizeof() 内转换数组时出现意外结果

c++ - opengl如何知道有多少个顶点?

c++ - vector 运算符和类型转换

java - 如何在 NetBeans 7.1.1 中为日志消息创建代码模板