跳到主要内容

简述成员函数里 memset(this,0,sizeof(*this))会发生什么 ?

参考答案:

memset(this, 0, sizeof(*this)) 这行代码在成员函数中执行时,会将当前对象的所有字节设置为0。这通常用于对象的初始化或重置。

让我们逐一分析这行代码的各个部分:

  1. this:在C++中,this 是一个指向调用对象本身的指针。在成员函数内部,你可以使用 this 来访问或修改对象的状态。
  2. memset:这是C语言标准库中的一个函数,用于将内存块中的特定数量的字节设置为一个特定的值。它通常用于底层内存操作,但在C++中有时也会被使用(尽管在C++中有更高级的初始化方法)。
  3. 0:这是你想要设置的值。在这种情况下,你希望将所有字节设置为0。
  4. sizeof(*this)sizeof 是一个运算符,用于获取其操作数的大小(以字节为单位)。在这里,*this 表示当前对象,sizeof(*this) 就是获取当前对象的大小。

因此,memset(this, 0, sizeof(*this)) 会将调用该成员函数的对象的所有字节设置为0。这通常用于重置对象的状态,使其回到一个“干净”的状态,其中所有成员变量都被初始化为0。

需要注意的是,memset 的使用在C++中并不总是推荐,因为它不会调用对象的构造函数或析构函数,也不会处理对象的虚函数或对齐问题。在C++中,更推荐使用构造函数、析构函数、赋值运算符重载、初始化列表、std::fill_n 或其他高级特性来进行内存初始化或重置。但在某些特定的低层次或性能关键的场景中,memset 可能仍然是一个有效的选择。