[英]C++ facade avoiding copies
考虑以下简化的外观模式:
class Foo {
public:
int times;
int eval(const int val) { return val*times; }
};
class Bar {
Foo foo;
public:
Bar(const Foo& f) : foo(f) {}
double eval(const double val) { return val * foo.times; }
};
显然,只需要Bar的实例即可评估Foo的eval()方法的特殊(即双值)解释。 吧台除了转发给它的foo外,没有其他成员。
出于安全原因,我没有在Bar内部使用const
引用或pointer
(我只是不知道Bar实例是否可能在某个时刻从stack
帧中逸出,因此资源管理很重要)。
我的问题有两个:
C++
编译器是否可以检测到Bar只是一个外观并“ 内联 ”成员访问? 例如:
struct Bar {
// Only accept rvalues of Foo
explicit Bar(Foo&& f) : f(std::move(f)) {}
Foo f;
};
1-是的,编译器很可能会内联函数[取决于编译器]。
2-始终坚持RAII 。 在C ++ 3中, Foo
对象foo
应该是成员变量(如您所做的那样)或托管指针(在复制构造函数和赋值运算符中复制,并在析构函数中删除)。 在C ++ 11中,您可以使用正确的值引用。
注意:此示例不是立面!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.