【发布时间】:2014-01-03 20:27:35
【问题描述】:
考虑以下简化的外观模式:
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 不会有任何其他成员。
出于安全原因,我没有在 Bar 内部使用 const 引用或 pointer(我只是还不知道 Bar 实例是否会在某个时候从 stack 框架中逃脱,因此资源管理是重要的)。
我的问题有两个:
-
C++编译器能否检测到 Bar 仅仅是一个门面,并且 “内联”成员访问权限? - 是否有(安全)方法来防止复制 传递的对象?
【问题讨论】:
-
1.它可能会内联它。