2

可能重复:使用 new 实例化对象与不创建对象有
什么区别:使用或不使用 `new`

这两种说法有什么区别

 HttpUtil httpUtil;

 HttpUtil *net = new HttpUtil();

哪个更好用?

4

3 回答 3

4

第一个创建一个自动变量。内存管理是自动的,分配更快,因为它在堆栈上,没有内存泄漏的机会。

第二个版本创建一个动态变量——你负责清理内存,堆上的分配速度较慢。

永远喜欢第一个。如果您必须使用动态分配(用于持续生命周期或多态行为),请使用智能指针而不是原始指针。

于 2012-12-18T11:49:16.463 回答
2

第一条语句创建一个httpUtil在“堆栈”上调用的变量 - 这意味着,一旦包含该行的函数完成,该变量就会“超出范围”并被释放(它使用的内存可以自由用于其他东西)。

第二条语句在“堆”上创建一个变量——这意味着该变量将保留在内存中,直到您调用delete它。在堆上分配变量时,您需要确保始终delete在某个时候使用它,否则您会出现内存泄漏 - 这是您无法再看到*net变量的地方,但内存仍然被分配。

于 2012-12-18T11:51:26.057 回答
1

第一个是静态创建的对象,您无需担心它的破坏。后来一个是动态创建的对象,您需要在应用程序终止之前处理它的销毁。

第一个是首选,您不需要担心内存管理。

于 2012-12-18T11:52:15.210 回答