gpt4 book ai didi

C++ 是否使用 auto_ptr 引用作为输出变量惯用?

转载 作者:太空狗 更新时间:2023-10-29 20:06:41 25 4
gpt4 key购买 nike

假设我想编写工厂方法,该方法应该在堆上分配异构 对象并将它们返回给调用者。我正在考虑像这样设计 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_ptrstruct,或者编写工厂 API 来获取原始指针引用。它们都需要编写更多代码,而后者在异常安全方面还有其他问题。

最佳答案

问一些惯用的东西可以让你得到一些非常主观的答案。但是,总的来说,我认为 auto_ptr 是传达所有权的好方法,因此作为类工厂的返回——这可能是一件好事。我想重构这个,这样

  1. 您返回一个对象而不是 2 个。如果您需要 2 个紧密耦合的对象,如果没有彼此它们就无法存在,我会说您有充分的理由进行 is-a 或 has-a 重构。
  2. 这是 C++。真的问问自己是否应该返回一个表示成功的值,迫使你工厂的消费者每次都必须检查。从工厂类的构造函数中抛出异常或传递异常。您是否愿意接受 false 并尝试对未初始化的 auto_ptr 进行操作?

关于C++ 是否使用 auto_ptr 引用作为输出变量惯用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com