假设我想编写一个工厂方法,该方法应该在堆上分配不同类型的对象,并将它们返回给调用者。我考虑设计API如下:
bool MakeEm(auto_ptr<Foo>& outFoo, auto_ptr<Bar>& outBar) {
...
if (...) {
return false;
}
outFoo.reset(new Foo(...));
outBar.reset(new Bar(...));
return true;
}
这使得调用者可以这样做:
auto_ptr<Foo> foo;
auto_ptr<Bar> bar;
MakeEm(foo, bar);
我的问题是:“这种用法是否通顺自然?如果不是,有什么正确的方法?”我能想到的其他方法包括返回一个
auto_ptr
的struct
,或者编写工厂API以接受原始指针引用。它们都需要编写更多的代码,后者在异常安全方面还存在其他问题。
bool
返回值吗? - GManNickG