【发布时间】:2013-08-14 10:54:52
【问题描述】:
我遇到了一个问题,即在 n > 1,000,000 的大向量上调用 std::vector.clear() 需要很多秒。
目前是结构体的std::vector,基本上是POD。析构函数中不需要清理。我考虑将结构更改为类,因为我想向它们添加一些函数,但我不确定这将如何影响对大量这些类/结构的向量调用 clear。
归结为想知道 std::vector.clear() 何时会调用析构函数。我的印象是,现在 C++ 中的类和结构没有区别,除了结构成员默认为公共。
我不想仅仅因为我想保证不调用析构函数而不得不切换到使用 malloc、realloc 和释放自己并跟踪大小,但似乎我什至会受到性能影响调用 clear() 时。
【问题讨论】:
-
什么是“大量时间”?
-
你是否为你的结构提供了析构函数?如果你声明了它,它就不再是一个 POD。
-
基本上是 POD。 POD 是一个明确的类别,一个类型要么是 POD,要么不是 POD,它不能基本上是 POD。那是什么? --这个问题的答案与您的问题非常相关。
-
您确定您使用的是 POD 吗?检查 stackoverflow.com/questions/4178175/… 了解 POD 的组成部分。
-
如果这与您的 previous question 有关,那么您的 ORDER 结构包含
std::vector而不是 POD。