微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++-当向量包含对象时会调用析构函数吗?

如何解决C ++-当向量包含对象时会调用析构函数吗?

| 如果我在向量内动态分配类的对象,那么如果我使用clear(),是否会为每个对象调用析构函数?     

解决方法

        是的,它们都被正确清理了。 从此链接:   删除向量的所有元素:调用它们的析构函数,然后将其从向量容器中删除,使容器的大小为0。 即将到来的标准的“ 0”部分也清楚地表明了这一点:   
a.clear()
破坏
a
中的所有元素,使所有引用
a
元素的引用,指针和迭代器无效,并且可能使过去的迭代器无效。     ,        您精确地“动态分配”是什么意思?如果您使用
vector<foo>
,那就可以了。如果通过ѭ5插入指针,则析构函数将不会被调用,因为指针本身没有析构函数。 但是请注意,在``4''情况下,您可能会发现构造函数和析构函数的调用次数比预期的多得多,例如当调整向量的大小时,因为向量会在需要时在内存中移动对象时使用它们。您可以使用Boost
shared_ptr
来解决此问题,尽管由于参考计数簿记而导致的性能成本较低。 我的建议:如果要廉价复制和销毁物品,请使用ѭ4,如果价格昂贵或难以复制则使用use9。除非特别要避免使用矢量处理内存管理,否则请不要使用
vector<foo*>
,只有当心;恕我直言,这很少是个好主意。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。