繁体   English   中英

在哪种情况下std :: vector.clear()会调用析构函数?

[英]Under which circumstances will std::vector.clear() call a destructor?

我一直遇到一个问题,在大向量上调用std :: vector.clear(),n> 1,000,000需要花费几秒钟的时间。

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

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

我讨厌不得不切换到使用malloc,realloc和释放自己并跟踪大小,只是因为我想保证不会调用析构函数,但是即使调用clear,似乎也对性能造成了影响()。

在struct和class之间切换不会有任何区别-您正确的是,它们之间的唯一区别是默认可见(struct公开,class私有)。

重要的是容器中的物品是否具有非平凡的析构函数。 如果它们不平凡,它们将被调用。 如果它们很琐碎,那么(至少在一般情况下)根本没有什么调用的。

在没有任何有关当前代码和/或消耗时间的真正想法的情况下,就如何加快处理速度给出不错的建议有点困难。 在您的位置上,我会认真考虑对代码进行概要分析。 一旦知道确切的时间花在哪里 ,您就有机会改善情况-但在那之前,您几乎是在黑暗中拍摄-您可能会尝试改善(几乎)没有时间开始的事情这样,您的改进就没有任何区别,或者您可能会在重要的事情上工作,但最终会使它变慢而不是变快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM