忽略函数的返回引用结果

ana*_*lyg 6 c++ return-by-reference temporary-objects

假设我有一个返回重要结果和几个不重要结果的函数.我声明它以便通过引用返回不重要的结果:

int CalculateStuff(int param1, int param2, int& result1, int& result2);
Run Code Online (Sandbox Code Playgroud)

我想调用这个函数来计算一些东西,但在调用网站我想忽略不重要的结果.我可以这样做:

...
int dummy1, dummy2;
int result = CalculateStuff(100, 42, dummy1, dummy2);
... // do something with the result
Run Code Online (Sandbox Code Playgroud)

我想在不声明虚拟变量的情况下考虑另一种方法:

int result = CalculateStuff(100, 42, *new int, *new int);
Run Code Online (Sandbox Code Playgroud)

这有内存泄漏(不可接受),但有一个优点是比"虚拟"名称更清楚地显示我的意图(忽略结果).

那么,如果我按如下方式编写会发生什么:

int result = CalculateStuff(100, 42, auto_ptr(new int).get(), auto_ptr(new int).get());
Run Code Online (Sandbox Code Playgroud)

这合法吗?执行函数代码时,临时整数是否仍然存在?我应该用unique_ptr而不是auto_ptr吗?

(请不要建议重构我的代码;我可能会 - 但首先我想了解这些东西是如何工作的)

ham*_*ene 4

这是合法的;auto_ptr对象将保持活动状态,直到表达式结束(即函数调用)。但它丑陋得要命。

只需重载你的函数:

int CalculateStuff(int param1, int param2, int& result1, int& result2);
int CalculateStuff(int param1, int param2) { 
    int r1=0, r2=0; 
    return CalculateStuff(param1, param2, r1, r2);
}
Run Code Online (Sandbox Code Playgroud)