C++ 对象构造语法
可能重复:C++ 对象构造语法,c++,oop,C++,Oop,可能重复: 这两种说法有什么区别 HttpUtil httpUtil; 及 使用哪一个更好?第一个创建一个自动变量。内存管理是自动的,分配速度更快,因为它在堆栈上,没有内存泄漏的机会 第二个版本创建了一个动态变量——您负责清理内存,堆上的分配速度较慢 总是喜欢第一个。如果必须使用动态分配(用于持久生存期或多态行为),请使用智能指针而不是原始指针。第一条语句在“堆栈”上创建一个名为httpUtil的变量-这意味着,一旦包含该行的函数完成,该变量就“超出范围”并被释放(它使用的内存可以自由用
这两种说法有什么区别
HttpUtil httpUtil;
及
使用哪一个更好?第一个创建一个自动变量。内存管理是自动的,分配速度更快,因为它在堆栈上,没有内存泄漏的机会 第二个版本创建了一个动态变量——您负责清理内存,堆上的分配速度较慢
总是喜欢第一个。如果必须使用动态分配(用于持久生存期或多态行为),请使用智能指针而不是原始指针。第一条语句在“堆栈”上创建一个名为
httpUtil
的变量-这意味着,一旦包含该行的函数完成,该变量就“超出范围”并被释放(它使用的内存可以自由用于其他内容)
第二条语句在“heap”上创建一个变量-这意味着该变量将保留在内存中,直到您在其上调用
delete
。在堆上分配变量时,您需要确保始终delete
它,否则您将出现内存泄漏-这是您无法再看到*net变量,但内存仍然是分配的。第一个是静态创建的对象,您不需要担心它的破坏。
后一个是动态创建的对象,您需要在应用程序终止之前处理它的销毁
在不需要担心内存管理的情况下,首选第一个。第一个在堆栈上分配,另一个在堆上,程序员有责任在使用后释放它(当它在堆上分配时)。如果可以不使用第二个,则首选第一个:)请从中获取一本初学者书籍。这样,即使在我实例化它的函数完成时,我也可以访问*net
。@kalkin取决于您如何返回它。例如,我是否将它作为指针返回?如果您返回指针,即返回&httpUtil
,则它是错误的。如果你通过引用返回,那就错了。只需按值返回。
HttpUtil *net = new HttpUtil();