[英]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.