java - 运算符重载 STL 的性能损失是什么

标签 java c++ stl memory-leaks

我非常喜欢STL。它使编码算法变得非常方便,因为它为您提供了所有原语,如分区、查找、binary_search、迭代器、priority_queue 等。此外,您根本不必担心内存泄漏。

我唯一担心的是让 STL 工作所必需的运算符重载的性能损失。 为了进行比较,我认为它依赖于 == 提供所需的语义。如果我们要将我们的类添加到容器中,我们需要重载 ==operator。

为了这种便利,我损失了多少效率?

另一个关于内存泄漏的问题:

  1. 使用 STL 容器时会发生内存泄漏吗?
  2. Java 中会发生内存泄漏吗?

最佳答案

在通用类型上使用 STL 算法时,您必须以某种方式提供比较逻辑。运算符重载对任何其他函数没有性能损失,并且可以(与任何其他函数一样)内联以消除任何函数调用开销。

许多标准容器和算法也使用 std::less因此默认情况下 <而不是 == .

标准容器本身不会泄漏,但您可以使用它们来保存对象(例如指针),这些对象不一定会清理它们“拥有”的内存。

在 Java 中很难泄漏内存,但这并不意味着你不会因为没有良好的对象所有权语义而陷入困境,也不意味着你不能用完所有可用内存和崩溃。

关于java - 运算符重载 STL 的性能损失是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1800423/

相关文章:

java - 有没有办法使用 EqualBuilder 获取不相等的字段

java - 如何修复 : Can't parse Json Array. "Not a primitive array"错误

c++ vs MATLAB 速度优化。例如。我的 matlab 代码运行速度比 C++ 快?

c++ - 在 ADL 期间如何防止遮盖?

c++ - eclipse cdt的代码分析不懂虚继承

c++ - 带有模板容器的模板类

Java 泛型 : cannot find symbol

c++ - STL Vector是否默认使用 'new'和 'delete'进行内存分配?

c++ - RAII、伯克利套接字和 STL 容器

java - 在带有父类(super class)的 Lombok 构建器中使用自定义 setter