【发布时间】:2021-03-04 22:07:13
【问题描述】:
我想创建一个仅用于设置函数参数的类。 我为此使用了流畅的界面。 一些函数返回对象设置参数,真正的代码将在这个对象的析构函数中执行。
首先,这是个好主意吗?当我有很多参数时,这是提高代码可读性的常用方法吗?或者也许我应该使用另一种方式来做到这一点?我很乐意就此提供建议。
如果没问题,如何防止意外将对象保存到局部变量?在这种情况下,析构函数将在变量作用域的末尾被调用。
例子:
class MyClass {
public:
~MyClass() noexcept {
// some code to execute immediately after setting params A and B
}
// abstract setting methods
MyClass &SetA() { return *this; }
MyClass &SetB() { return *this; }
};
MyClass SomeFunction() {
return MyClass();
}
int main() {
// Correct usage:
SomeFunction()
.SetA()
.SetB();
// destructor here
// I want to prevent it:
auto my_class = SomeFunction();
my_class
.SetA()
.SetB();
{
auto my_class2 = SomeFunction();
my_class2
.SetA()
.SetB();
// destructor of `my_class2` here
}
// destructor of `my_class` here.
return 0;
}
【问题讨论】:
-
老实说,这看起来像XY Problem
标签: c++ oop destructor fluent-interface