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日

悬赏问题

  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!
  • ¥15 vmtools环境不正常
  • ¥15 请问如何在Ubuntu系统中安装使用microsoft R open?
  • ¥15 jupyter notebook