对象构造语法

时间:2012-12-18 11:47:26

标签: c++ oop

  

可能重复:
  What is difference between instantiating an object using new vs. without
  Creating an object: with or without `new`

这两个陈述之间有什么区别

 HttpUtil httpUtil;

 HttpUtil *net = new HttpUtil();

哪一个更好用?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

第一个语句在'stack'上创建一个名为httpUtil的变量 - 这意味着,只要包含该行的函数完成,变量就会超出范围并被释放(内存就会被释放)用途可以免费用于其他东西)。

第二个语句在'heap'上创建一个变量 - 这意味着变量将保留在内存中,直到你在其上调用delete。在堆上分配变量时,您需要确保在某个时刻总是delete,否则会导致内存泄漏 - 这是您无法再看到*net变量的地方,而是内存仍然被分配。

答案 2 :(得分:1)

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

首先,您不需要担心内存管理。