Рассмотрим следующий упрощенный шаблон фасада:C++ фасадных избегая копии
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 только требуется оценить специальное (т.е. двузначное) интерпретация Eval Foo (в) способ. В баре не будет никаких других участников, кроме foo, на которые он направляется.
Из соображений безопасности я не использовал const
ссылку или pointer
внутри бара (я просто не знаю, если в какой-то момент экземпляр Bar может уйти от stack
кадра, так что управление ресурсами важно).
Мой вопрос здесь два раза:
- Может
C++
компилятор возможно обнаружить, что Bar является лишь фасад и «рядный» доступ членом? - Есть ли (безопасный) способ предотвращения копирования переданного объекта?
** 1. ** возможно, это будет встроено в него. –