我有一个以对象类型作为返回值类型的成员函数:
MyObject myfunction(parameters) {
if (some condition) {
return MyObject(parameters);
} else {
... no valid object can be created ...
}
}
在某些情况下(在函数体中检查),无法创建和返回 MyObject 类型的对象。
作为一个偶尔的 c++ 程序员,我可以自发地提出三个解决方案:
- 将返回值类型更改为 * MyObject 并在无法创建有效对象时返回 nullptr (C++11),然后在调用代码中检查与 nullptr 的相等性。
- 如果无法创建对象并在调用代码中捕获该对象,则抛出异常。
- 使用我定义为无效的一些值创建一个对象,并在使用返回的对象之前检查它。
处理这种情况的标准方法和性能方面的最佳解决方案是什么?...或一些我看不到的明显解决方法...
最先进的 C++11 解决方案将是完美的 :-)
到目前为止我的想法:
解决方案 1 似乎还可以,但仅适用于 C++11,我必须在堆上创建返回的对象才能将其传递给主程序(将对象本身返回给调用函数,因此将其保留在堆栈中对于小对象可能会更快?)。
解决方案 2 可能会更慢,并导致主程序中的编码冗长。
解决方案 3 可能是最慢的(徒劳地创建了一个对象)并且在主程序中检查不是很方便。
对于我的代码,没有有效的返回对象是默认情况而不是异常,并且创建的对象相当小,但是考虑不同情况的一般考虑对于其他读者的应用程序肯定有用......
非常感谢大家的帮助:-)