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吗?
(请不要建议重构我的代码;我可能会 - 但首先我想了解这些东西是如何工作的)
这是合法的;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)