【发布时间】:2012-01-20 04:52:45
【问题描述】:
我不太明白动态分配内存的意义,我希望你们能让我更清楚。
首先,每次我们分配内存时,我们只需要一个指向该内存的指针。
int * dynInt = new int;
那么做我上面所做的和:
int someInt;
int* dynInt = &someInt;
据我了解,在这两种情况下,内存都是为 int 分配的,并且我们得到了指向该内存的指针。
那么两者之间有什么区别。什么时候一种方法优于另一种方法。
还有更多为什么我需要使用
来释放内存delete dynInt;
在第一种情况下,但不是在第二种情况下。
我的猜测是:
当为对象动态分配内存时,对象不会被初始化,而如果你在第二种情况下执行类似的操作,对象会被初始化。如果这是唯一的区别,那么除了动态分配内存更快之外,还有其他动机吗?
我们不需要在第二种情况下使用 delete 的原因是,对象已初始化的事实创建了某种自动销毁例程。
如果有人纠正我并为我澄清事情,这些只是猜测。
【问题讨论】:
-
如果您不确定,请遵循简单的规则:“永远不要使用指针;永远不要使用
new。”一旦你理解了手动管理对象生命周期的必要性,你就会知道什么时候打破这个规则。 -
嗯,我强烈建议您打开一本关于 C++ 的书。变量范围、动态内存管理通常在任何 C++ 初学者书籍的第 4 章或第 5 章中讨论。 @KerrekSB 我不会这么说.. 特别是在这种情况下,不确定性不是来自歧义,而是来自知识不足 - 如果您不确定,请确保您阅读足够,所以您确定。
-
动态分配内存通常较慢,初始化与此无关。
-
-1 这个问题没有显示任何研究工作,这本来是在 C++ 书籍或类似书籍中查找该主题
标签: c++ memory-management