【发布时间】:2019-12-12 07:04:42
【问题描述】:
是否有可能(不使用 boost)在 c++ 中具有如下功能:
void foo(int x, classX &obj = *(new classX()))
classX 在我的代码库中被多次使用,并且有许多具有相似签名的此类函数(即使用此类对象作为默认参数)。是否有可能在没有重载调用的情况下实现这一点?
【问题讨论】:
-
如果引用是
const,那么你可以这样做:void foo(int x, const classX &obj = classX()),否则使用重载更简洁:void foo(int x){ classX obj; foo(x, obj); } void foo(int x, classX &obj) {...} -
void foo(int x, const classX &obj = {}); -
hmm .. 这些引用中的每一个都应该引用同一个对象吗?
-
为什么要默认使用运算符
new?如果foo()忘记/未能使用相应的运算符delete,这是导致内存泄漏的一种非常有效的方法? -
为什么不直接使用普通指针并在函数中取消引用它们呢?不过,reference wrappers 可能会有所帮助。
标签: c++ overloading pass-by-reference default-arguments