xyj8035 2021-10-12 17:05 采纳率: 50%
浏览 74
已结题

c++ 如何free泛型结构体成员指针

我自定义了多个结构体,
例如A结构体如下
typeset struct A{
int index;
char* buf;
}
B结构体如下
typeset struct B{
char name[8];
char* str;
}

然后使用模板写了一个队列类,其中写了一个函数来释放队列中的元素,大致意思如下

template
int Queuepop()
{
T p=this->front();
free(p);
}
声明两个队列:
Queue qa;
Queue qb;
使用pop函数,
很显然free结构体A或者B时候,A里面的buf指针和B里面的str指针并没有释放掉,请问该怎么释放呢?
能够判别泛型的实际类型然后依次free吗?有没有什么办法free结构体成员变量?

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-10-12 17:14
    关注

    一种方法是在free前手动释放
    if(p->str) {free(p->str); p->str = 0;}
    free(p);
    另一种方法是,给结构体添加析构函数(结构体是一种特殊的类,所以可以有析构函数),这样,当p被释放时,结构体中str的内容也自动调用析构函数释放str的内存。如果用析构函数,必须给str初始化。否则析构时会出错,可以通过构造函数来实现:
    struct B(){str = 0;}
    ~struct B()
    {
    if(str) free(str); str = 0;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵