【发布时间】:2021-11-10 00:57:53
【问题描述】:
我对 c++ 中的默认参数有疑问。如果我有这样的功能:
int foo(int* obj = new Int(4)) {
/* Stuff with obj. */
}
当然,这里的整数只是作为示例,但问题是我是否要为这样的参数提供一个值:
int x = 2;
foo(&x);
即使我为参数提供了一个值并因此分配了我无法再读取的内存,是否仍会评估表达式 obj = new Int(4)?
【问题讨论】:
-
只有在没有参数的情况下调用函数时才会评估默认参数。
-
否,那么
new将不会被执行。但要注意,如果没有传递任何参数,如果你没有delete指针,你可能会发生内存泄漏。如果您使用delete指针,您如何区分传递给非新分配对象的指针和分配新对象的指针之间的区别? (提示:你不能!)简而言之,使用new作为默认参数是一个非常个坏主意!
标签: c++