• 6201阅读
  • 7回复

[提问]QVector等模板库里的类个体调用自己的析构函数后怎么办? [复制链接]

上一主题 下一主题
离线snake3342
 

只看楼主 倒序阅读 楼主  发表于: 2015-01-15
如果我有一个类叫abc
然后QVector<abc> xyz;
xyz有5个元素,其中第一个元素调用了自己的析构函数,而xyz不知道,那么会造成什么事情呢?
离线realfan

只看该作者 1楼 发表于: 2015-01-16
生命期结束,自动析构。会有什么问题吗
离线snake3342

只看该作者 2楼 发表于: 2015-01-18
回 realfan 的帖子
realfan:生命期结束,自动析构。会有什么问题吗 (2015-01-16 08:18) 

那这时xyz.size()到底是原来的数字,还是-1了呢?
离线dbzhang800

只看该作者 3楼 发表于: 2015-01-18
回 snake3342 的帖子
snake3342:那这时xyz.size()到底是原来的数字,还是-1了呢? (2015-01-18 08:57) 

建议你先把问题描述清楚,或者给出几行代码。

按你当前的描述,对你的xyz不会造成任何影响。
至于会造成什么事情,应该和没有QVector时造成的事情一样,就如同下面的代码

{
abc a;
a.~abc();
}

离线realfan

只看该作者 4楼 发表于: 2015-01-18
回 snake3342 的帖子
snake3342:那这时xyz.size()到底是原来的数字,还是-1了呢? (2015-01-18 08:57) 

容器的大小,不会因里面的内容变化的
xyz.size()仍是原来的数字,因为并未xyz做操作。
离线snake3342

只看该作者 5楼 发表于: 2015-01-19
QVector<abc> xyz;//

for (int i=0;i<5;+i)
{
abc temp_instance(i);//用i构造一个实例
xyz.append(abc);
}
正常情况下,xyz.size()应该返回5,
此时如果运行了
xyz.last().~abc();
那么xyz.last()将返回原来的第四项(就是模板实例知道自己的最末一个元素消失了)
还是仍然返回数据清空了的第五项?

运行xyz.size();
返回5还是返回4?
离线dbzhang800

只看该作者 6楼 发表于: 2015-01-19
回 snake3342 的帖子
snake3342:QVector<abc> xyz;//
for (int i=0;i<5;+i)
{
abc temp_instance(i);//用i构造一个实例
....... (2015-01-19 15:33) 

肯定是5

对于你的最后一个abc对象来说,你这样调用析构函数,和调用它的普通的成员函数没有任何区别:对象依然存在(尽管可能已经不完整),对象析构时仍会调用析构函数(取决于你的析构函数中的内容,如此两次调用,可能会导致crash)。
离线realfan

只看该作者 7楼 发表于: 2015-01-21
回 snake3342 的帖子
snake3342:QVector<abc> xyz;//
for (int i=0;i<5;+i)
{
abc temp_instance(i);//用i构造一个实例
....... (2015-01-19 15:33) 

搞掉了容器里的东西,并不会改变容器大小
快速回复
限100 字节
 
上一个 下一个