为了账号安全,请及时绑定邮箱和手机立即绑定

请问 mystack[top--].~T();,这是什么用法?

请问 mystack[top--].~T();,这是什么用法?

莫回无 2021-12-15 11:07:59
mystack是指针 T是模板参数 这是什么用法? 不像析构函数啊
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

我用的mingGW 32bit的编译器,遇到了和你一样的问题,在数组上去调用一个Template模板的析构函数。 结果是无效,数组内的元素没有被删除成功,但是编译器也没有报错。
找到原因了。你的stack[top--].~T()在语义上是要销毁栈顶实体的,如果这个元素实体是内置类型如:int,double,内置指针类型等是无法销毁的,但是如果模板实参类型持有需要管理生命周期的资源呢?比如数组元素是一个自己定义的类类型而且这个类有它自己的析构函数,那么当我们stack[top--].~T()这样调用的时候实际上是显式调用栈顶类类型元素实体自己的析构函数。
这样数组里面的一个类类型元素实体就自己销毁了。

查看完整回答
反对 回复 2021-12-19
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

首先调用析构函数~T()释放top的内存,然后top--将top向下平移一个。代码主要用于栈的删除操作。

查看完整回答
反对 回复 2021-12-19
  • 2 回答
  • 0 关注
  • 244 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信