gpt4 book ai didi

c++ - 什么情况下 std::vector.clear() 会调用析构函数?

转载 作者:行者123 更新时间:2023-11-28 00:42:14 25 4
gpt4 key购买 nike

我一直遇到一个问题,即在大型 vector 上调用 std::vector.clear(),n > 1,000,000 需要很多秒。

目前是std::vector of structs,基本都是POD。析构函数中不需要清理。我考虑过将结构更改为类,因为我想向它们添加一些函数,但我不确定这将如何影响对大量此类/结构的 vector 调用 clear。

归结为想知道 std::vector.clear() 何时调用析构函数。我的印象是,如今除了结构成员默认为公共(public)之外,C++ 中的类和结构之间没有区别。

我不想切换到使用 malloc、realloc 和 free myself 并跟踪大小,只是因为我想保证不调用析构函数,但似乎我什至在性能上受到影响调用 clear() 时。

最佳答案

在 struct 和 class 之间切换不会有任何区别——您是对的,它们之间的唯一区别是默认可见(public for structs,private for classes)。

重要的是容器中的项目是否具有非平凡的析构函数。如果它们很重要,它们将被调用。如果它们微不足道,那么(至少一般情况下)不会有任何调用。

如果不真正了解当前代码和/或所花费的时间在哪里,就如何加快速度提供体面的建议有点困难。在您的位置上,我会认真考虑分析代码。一旦您确切地知道时间花在了哪里,您就有机会改进一些事情——但在那之前,您几乎是在摸索——您可能会尝试改进一些需要花费的时间(几乎)没有时间开始,所以你的改进没有任何区别,或者你可能在做一些重要的事情,但最终让它变得更慢而不是更快。

关于c++ - 什么情况下 std::vector.clear() 会调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221990/

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