可能重复:
What is difference between instantiating an object using new vs. without
Creating an object: with or without `new`
这两个陈述之间有什么区别
HttpUtil httpUtil;
和
HttpUtil *net = new HttpUtil();
哪一个更好用?
答案 0 :(得分:4)
第一个创建一个自动变量。内存管理是自动的,分配更快,因为它在堆栈上,没有内存泄漏的可能性。
第二个版本创建一个动态变量 - 你负责清理内存,堆上的分配速度较慢。
总是喜欢第一个。如果必须使用动态分配(用于持久化生命周期或多态行为),请使用智能指针而不是原始指针。
答案 1 :(得分:2)
第一个语句在'stack'上创建一个名为httpUtil
的变量 - 这意味着,只要包含该行的函数完成,变量就会超出范围并被释放(内存就会被释放)用途可以免费用于其他东西)。
第二个语句在'heap'上创建一个变量 - 这意味着变量将保留在内存中,直到你在其上调用delete
。在堆上分配变量时,您需要确保在某个时刻总是delete
,否则会导致内存泄漏 - 这是您无法再看到*net
变量的地方,而是内存仍然被分配。
答案 2 :(得分:1)
第一个是静态创建的对象,您无需担心它的破坏。 后来一个是动态创建的对象,您需要在应用程序终止之前处理它的销毁。
首先,您不需要担心内存管理。