这是关于嵌入式 C++ 的。假设我有一个 struct Timer_t。
创建一个新对象
makeTimer()我们不能在设备上使用异常,并且要初始化计时器,我们可能会收到错误。
这就是为什么
std::expected<Timer_t,Error_t>由于我们使用 C++,人们往往会失败(太频繁地叫我来这里)
构造函数在这里只能使用一半,工厂函数对我们来说就是这样。
对于析构函数来说它工作得很好。如果我们离开了这个范围,我们就会取消它的初始化。事情应该是这样的。
现在问题开始了:如果我们返回makeTimer()对象,我们就可以移动。
更准确地说,我们称之为move constructor!
因此我们有 2 个对象,我们将对象称为析构函数。
更准确地说:
makeTimer() -> Timer_t() -> std::move/Timer_t(Timer_t &&) -> ~Timer_t() -> program ends -> ~Timer_t();
Run Code Online (Sandbox Code Playgroud)
对于移动来说,这是预期的行为。因此,它符合标准,但很烦人。
在嵌入式环境中,我发现人们在扩展代码时会面临很大的失败风险。
我只想在最后调用一次析构函数。
Error_t makeTimer(Timer_t & uninitialized Type)(会扼杀 std::expected 背后的想法并使代码不那么“好”)std::shared_ptr(额外费用...)或简单的布尔值。有没有更好的更清洁的想法来解决这个问题?我不可能是唯一一个拥有它的人。