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

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 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!