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

问题描述

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

解决方法

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