gpt4 book ai didi

destructor - C++ - 当向量包含对象时是否调用析构函数?

转载 作者:行者123 更新时间:2023-12-04 21:24:44 27 4
gpt4 key购买 nike

如果我在 vector 中动态分配一个类的对象,如果我使用 clear() 是否会调用每个对象的析构函数?

最佳答案

“动态分配”到底是什么意思?如果您使用 vector<foo>那你很好。如果您通过 vector<foo*> 放置指针那么析构函数将不会被调用,因为指针本身没有析构函数。

但是请注意,在 vector<foo> 中在这种情况下,您可能会发现构造函数和析构函数的调用比您预期的要多得多,例如当矢量被调整大小时,因为矢量将在需要时在内存中移动对象时使用它们。您可以使用升压 shared_ptr为了解决这个问题,尽管由于引用计数簿记,性能成本很小。

我的建议:使用 vector<foo>如果对象的复制和销毁成本低廉,并且vector<shared_ptr<foo> >如果它们很昂贵或难以/不可能复制。永远不要使用 vector<foo*>除非你特别想避免让 vector 处理内存管理,然后才小心;恕我直言,这很少是个好主意。

关于destructor - C++ - 当向量包含对象时是否调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6326246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com