![]() |
1
13
在我的书中,使用括号来限定自动变量的范围是可以的,但是一般来说,如果你发现自己经常这样做,特别是在同一个函数中多次这样做,那么你的函数可能做了太多不同的事情,应该被分解。 |
![]() |
2
5
向量的数据总是动态分配的。只有簿记数据存储在堆栈上。即使不是这样,堆栈内存分配基本上是免费的。在大多数体系结构中,从堆栈中释放只是改变寄存器的值。
关于动态释放,它必须在一个或另一个点(特别是函数的末尾)释放。在你想分配更多的内存而内存不足之前,你不会因为内存分配而丢失任何东西。在你真正遇到问题之前,是否真的需要关注解除分配发生的准确时间?
但重点是什么?你似乎真的过早地关注自己的优化。
|
![]() |
3
3
Vector不在堆栈上存储内存。只有向量对象本身存储在那里,它不是很大。像这样限定它的作用域会强制销毁,从而释放它分配的内存。 另外,我不确定ISO中是否指定了实现必须从堆栈中弹出子范围变量。 |
![]() |
4
3
正如其他人所指出的,向量内存没有在堆栈中分配。如果你想尽早释放这些记忆,常用的习惯用法是:
请注意
|
![]() |
5
0
如果内部代码将在其他地方重用,请将其分离为一个函数。如果内部代码经常被调用(比如在循环中),那么它可能需要被重构,这样向量就不会在循环中不断地被创建和破坏。否则,我不认为按你的建议去做是不好的做法。 |
![]() |
Post Self · std::是否可以退出泄漏内存? 7 年前 |
![]() |
OneRaynyDay · 在这种情况下,我应该使用智能指针吗? 7 年前 |
![]() |
jcai · 对象的ctor和dtor必须在同一个线程上吗? 7 年前 |
![]() |
Stradigos · 防止解构宏中定义的匿名变量,直到作用域结束 8 年前 |
![]() |
user877329 · 通用句柄类 8 年前 |