码迷,mamicode.com
首页 > 编程语言 > 详细

C++使用memset注意事项

时间:2020-03-19 15:13:29      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:c++   破坏   space   私有变量   sig   memset   eof   string   转换   

不要随意用memset对C++复杂对象进行数据清除

//#include <cstring>        
void* memset( void* dest, int ch, std::size_t count );

它会 转换值 ch 为 unsigned char 并复制它到 dest 所指向对象的首 count 个字节。
因此memset方法会破坏对象内部保持状态的私有变量,从而造成未知后果。

示例

下例对std::string对象a进行了
memset操作,结果再次给对象a赋值时, a的值明显出现了异常。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string a = "Test";
    cout << a << endl;          // Test

    memset(&a, 0, sizeof(a));   // 破坏了C++对象的内部组织
    a = "Test2";
    cout << a << endl;          // p觍_{ 
    
    return 0;
}

C++使用memset注意事项

标签:c++   破坏   space   私有变量   sig   memset   eof   string   转换   

原文地址:https://www.cnblogs.com/yaoyu126/p/12524338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!