可能重复:使用 new 实例化对象与不创建对象有
什么区别:使用或不使用 `new`
这两种说法有什么区别
HttpUtil httpUtil;
和
HttpUtil *net = new HttpUtil();
哪个更好用?
可能重复:使用 new 实例化对象与不创建对象有
什么区别:使用或不使用 `new`
这两种说法有什么区别
HttpUtil httpUtil;
和
HttpUtil *net = new HttpUtil();
哪个更好用?
第一个创建一个自动变量。内存管理是自动的,分配更快,因为它在堆栈上,没有内存泄漏的机会。
第二个版本创建一个动态变量——你负责清理内存,堆上的分配速度较慢。
永远喜欢第一个。如果您必须使用动态分配(用于持续生命周期或多态行为),请使用智能指针而不是原始指针。
第一条语句创建一个httpUtil
在“堆栈”上调用的变量 - 这意味着,一旦包含该行的函数完成,该变量就会“超出范围”并被释放(它使用的内存可以自由用于其他东西)。
第二条语句在“堆”上创建一个变量——这意味着该变量将保留在内存中,直到您调用delete
它。在堆上分配变量时,您需要确保始终delete
在某个时候使用它,否则您会出现内存泄漏 - 这是您无法再看到*net
变量的地方,但内存仍然被分配。
第一个是静态创建的对象,您无需担心它的破坏。后来一个是动态创建的对象,您需要在应用程序终止之前处理它的销毁。
第一个是首选,您不需要担心内存管理。