struct MyMsg {
char* message;
char buffer[256];
MyMsg()
{
memset(this, '\0', sizeof(MyMsg));
const char* msg = "你好世界";
message = new char[strlen(msg)+1];
memset(message, 0, strlen(msg)+1);
memcpy(message, msg, strlen(msg));
const char* buf = "哈哈哈哈";
memset(buffer, 0, sizeof(buffer));
memcpy(buffer, buf, strlen(buf));
}
}
拓展:诸如使用容器数据类型
“typedef std::list< MyMsg>* PListMsg;”
时,因为MyMsg成员变量带有指针,不管是什么类型的指针都需要申请堆空间(new)而不是以取址符(&)传递的地址赋值,否则在追加到容器后相关指针指向的数据大概率会被覆盖!
本文介绍了一个C++结构体MyMsg的定义与初始化方法,重点讲解了如何在构造函数中为包含指针的成员变量分配动态内存,并演示了如何使用标准库中的list容器来管理这些结构体实例。文章强调了在使用容器存储包含指针成员的自定义类型时,必须通过new操作符在堆上分配空间,避免后续操作导致的数据覆盖风险。

399

被折叠的 条评论
为什么被折叠?



