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?