![]() |
1
35
解除分配向量的最简单和最可靠的方法是在堆栈上声明它,而不做任何事情。
C++保证了析构函数。
|
![]() |
2
15
在不破坏向量对象本身的情况下,释放向量中所有存储的最简单方法是
你的第二个变种也会有同样的效果,但它会在途中跳过更多的圈。“复制和交换”技巧会释放向量中的任何额外容量,如果它包含一些您想要保留的数据,则会很有用。如果没有数据,那么就不需要复制或交换。 |
![]() |
3
12
|
![]() |
4
3
我同意迈克·西摩的观点 试试这个,你会发现最后一个很好用
|
![]() |
5
1
除非确实需要,否则不要使用内存分配函数。如果您的类需要一个向量,那么总是直接添加std::vector成员。这里不需要做内存分配。 在需要动态向量的情况下,像在第一个示例中那样分配和删除它是100%正确的。 在第二个示例中,对std::swap的调用是严格不需要的,因为clear方法将清除向量,使其为空。一个可能的问题是,无法保证向量将实际释放内存,并将其返回到操作系统(或运行时)。矢量可能会保留分配的内存,以防清除后立即填充矢量。调用std::swap可能是“强制”向量释放其内部数据的一个技巧,但不能保证这将实际发生。 |
![]() |
6
1
我猜这里有一个向量,它暂时包含了大量的数据。一旦向量被清除,它仍然会占用所有的内存。您希望在处理完内存之后释放它,但是您正在处理的函数/对象尚未完成。 按期望值降序排列的解决方案:
交换和删除之间唯一的技术区别是基向量本身没有被破坏。这是一个很小的开销,不值得担心(只要你最终摧毁了向量) 更大的考虑是,这样更容易编写正确的代码,我相信交换比删除更容易,但比将向量移动到其他地方更糟糕。 |
![]() |
7
0
删除取消分配内存,然后内存可供下一个对象使用,但向量已消失。 第二个技巧释放任何多余的内存,但保持向量完整,但为空。 |
![]() |
8
0
虽然这两种方法看起来都有效,但我没有理由不直接调用指针上的delete。向量应该有一个调用的析构函数来处理其他一切。 |
![]() |
9
0
如果您只是让向量超出范围,它将适当地清理自己,而不需要额外的工作。如果向量是类的成员变量,并且您希望它在其所有者被破坏之前释放其内容,那么只需调用vec.clear()。
如果您想保留向量,但取消分配保存其内容的内存,那么
|
![]() |
10
0
这是无效的比较,因为示例处理的对象类型不同:动态持续时间和本地持续时间。你可以调用析构函数或者使用交换技巧(也就是收缩匹配)。这个 正确的 方式取决于是否需要向量对象来持久化。 例如,您可能需要它来保持 如果有引用或指向它的指针 这必须保持有效,在这种情况下,收缩是唯一的方法,不管它是如何分配的。 |
![]() |
11
0
我不知道为什么第二个示例将复制构造函数用于临时构造函数而不是默认构造函数。那会救你的
您可以将此设置为任何对象的通用,即使它不是容器。我假设std::swap专门用于调用vector::swap。
|
![]() |
12
0
如果向量确实需要在堆中,请不要忘记:
尤其适用于以下代码:
|
![]() |
llewmills · 根据数字是否为整数过滤数值向量[重复] 2 年前 |
![]() |
Rocket Procd · 在c中向向量插入元素++ 2 年前 |
![]() |
Daniel · 为什么我不能手动定义模板参数? 2 年前 |
![]() |
Swantewit · 将数组值推送到Rust中的向量 2 年前 |
![]() |
Giffyguy · 如何限制在构造向量后调用'resize()'? 2 年前 |
![]() |
clarkk · 当声明向量时,(1)是什么意思? 2 年前 |
![]() |
Loui Augst · 仅在局部X轴上将游戏对象指向另一个对象 2 年前 |
![]() |
F.A. · 从int向量中附加整数的字符串不会打印任何内容 2 年前 |