Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对象构造语法_C++_Oop - Fatal编程技术网

C++ 对象构造语法

C++ 对象构造语法,c++,oop,C++,Oop,可能重复: 这两种说法有什么区别 HttpUtil httpUtil; 及 使用哪一个更好?第一个创建一个自动变量。内存管理是自动的,分配速度更快,因为它在堆栈上,没有内存泄漏的机会 第二个版本创建了一个动态变量——您负责清理内存,堆上的分配速度较慢 总是喜欢第一个。如果必须使用动态分配(用于持久生存期或多态行为),请使用智能指针而不是原始指针。第一条语句在“堆栈”上创建一个名为httpUtil的变量-这意味着,一旦包含该行的函数完成,该变量就“超出范围”并被释放(它使用的内存可以自由用

可能重复:

这两种说法有什么区别

 HttpUtil httpUtil;


使用哪一个更好?

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

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


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

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


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

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


在不需要担心内存管理的情况下,首选第一个。

第一个在堆栈上分配,另一个在堆上,程序员有责任在使用后释放它(当它在堆上分配时)。如果可以不使用第二个,则首选第一个:)请从中获取一本初学者书籍。这样,即使在我实例化它的函数完成时,我也可以访问
*net
。@kalkin取决于您如何返回它。例如,我是否将它作为指针返回?如果您返回指针,即
返回&httpUtil
,则它是错误的。如果你通过引用返回,那就错了。只需按值返回。
 HttpUtil *net = new HttpUtil();