リファレンスとポインタの違い
■ このスレッドは過去ログ倉庫に格納されています
007837
NGNGこういうの、どうかな。pimplイディオム専用のラッピング。
template<class T>
class auto_ref{
public:
// デフォルトコンストラクタ
auto_ref(void) : R(*new T) {}
// 引数つきコンストラクタは、外でnewしたのを渡してもらう
auto_ref(T* _P) : R(*_P) {}
~auto_ref(){delete &R; }
T& get(void)const {return R; }
private:
T& R;
};
デフォルトでインスタンスを確保するから、auto_ptrのようにnewする
必要がないのが利点。
メンバ参照演算子(.)のオーバーロードが出来ないから、インスタンスの
アクセスがget()になっちゃってるのがダサイ…というか、欠点。
引数付きコンストラクタを用意しているのは、コンポジションしている
オブジェクト単位でpimlイディオムを使うときに便利だから。
// 先行宣言。A,Bはともに開発中のオブジェクトで、実装はおろか
// インターフェースも定まってないようなクラス。
class A;
class B;
class Hoge{
Hoge(int,double);
auto_ref<A> a_;
auto_ref<B> b_;
}
Hoge::Hoge(int n,double d) :
a_(new A(n)),
b_(new B(d))
{}
…どうかな?
■ このスレッドは過去ログ倉庫に格納されています