小编Jo3*_*erR的帖子

是否有另一种方法可以在不创建另一个对象的情况下实现 std::Optional 的功能?

class ScopedClass {
 public:
  ScopedClass() {
    cout << "constructor called\n";
  }

  ~ScopedClass() {
    cout << "destructor called\n";
  }

  ScopedClass(const ScopedClass &t)
  {
      cout << "copy constructor called\n";
  }

  ScopedClass(ScopedClass &&t)
  {
      cout << "move constructor called\n";
  }
}

std::optional<ScopedClass> check_and_return(bool condition) {
  if (condition == true)
    return std::make_optional(ScopedClass());
  return std::nullopt;
}

int main() {
  auto x = check_and_return(true);
}
Run Code Online (Sandbox Code Playgroud)

我想要一个ScopedClass对象,但当ScopedClass()我将其包含在std::optional. 这意味着析构函数在复制/移动时被调用,并且被调用两次。一旦进入check_and_return,一次main结束时。

我希望仅在结束时调用析构函数main

有办法实现这一点吗?或者不使用某种替代方法std::optional

c++ stdoptional

1
推荐指数
1
解决办法
86
查看次数

标签 统计

c++ ×1

stdoptional ×1