You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

失败时返回已移动函数参数是否合规?有无更优实现方案?

异常场景下返回已移动的函数参数是否属于可接受的编程模式?

当出现异常情况时,返回已移动的函数参数是否属于可接受的编程模式?比如尝试将数据存储到数据库但验证失败,需要返回数据句柄的场景。

class Database {
    using data_ptr = std::unique_ptr<std::vector<int>>;
public:
    [[nodiscard]] std::expected<void, data_ptr>
    validate_and_store(data_ptr&& data) {
        if(!validate_data(data)) {
            return std::unexpected(std::move(data));
        }
        m_data = std::move(data);
        return {};
    }
private:
    data_ptr m_data;
    static bool validate_data(data_ptr& data) {return data->size() < 6;}
};

validate_and_store的右值参数表明通常会转移数据所有权,但在异常情况下会返回该数据的句柄。调用方可以按如下方式使用:

Database db;
auto data_owner = get_big_data_from_somewhere();
auto db_info = db.validate_and_store(std::move(data_owner));
if(!db_info) {
    data_owner = std::move(db_info.error());
}

对于*“成功时移交所有权,失败时将所有权返回给调用者”*的需求,是否存在更优(或最佳)实践?当然可以使用非const引用并在后续检查nullptr,但这种方式无法清晰体现预期行为。


内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:35:10