トップ «前の日記(2010-08-18) 最新 次の日記(2010-08-21)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|

ToDo:


2010-08-20

_ pimpl 死んじゃえというはなし

http://d.hatena.ne.jp/lyrical_logical/20100819/1282232382

そういう話なんかなコレ。 pimpl 死ね死ね派として。

元の話は

// header

class C {
public:
    C();
    void f();
private:
    class CImpl;
    CImpl* pimpl_;
};

// source

class C::CImpl {
public:
    CImpl() {}
    void f() {
        // ...
    }
};

C::C() {}
void C::f() { pimpl_->f(); }

// header

class C {
public:
    C();
    virtual void f();

    static C* create();
};

// source

class CImpl : public C {
public:
    CImpl() {
    }
    virtual void f() {
        // ...
    }
};

C* C::create() {
    return new CImpl();
}

の比較ってことなんじゃないのかな知らんけど。 pimpl とファクトリの比較って言ってるから pimpl とファクトリは組み合わせれるとかじゃなくて、 pimpl 的なことをファクトリでやる、っていう話かと想像した。 まぁいずれにせよ元の話が違っても 僕は後者の方が好きだという主張したいという話をしたい。

pimpl って何がダメってめんどくさすぎることで、 ただでさえヘッダのせいで二カ所に関数名書かにゃならんので DRY から遠ざかってるのに、 pimpl とかしたらに三カ所なってありえんというだけ。 まぁそれだけなんだけど、しかし三カ所に書くってホントありえんと思うんですよ。 単に引数一個増やすだけであちこち書き直していくとか完全におかしい。

たぶん後者の話の弱点は仮想関数呼び出しとか ヒープアロケーションのオーバヘッドくらいなわけだけど、 たぶん pimpl 使いたいと思うようなクラスを思い出してみると、 たぶんたいした個数作らないオブジェクトがほとんどなんじゃないかなぁと思う。 NantokaMgr とか NantokaController とか名前つけたくなるクラスが多いんじゃないかと。

(02:16)

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

2010年
8月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
1.isshiki(2010-08-27 03:40) 2.shinh(2010-08-18 12:30) 3.もわ(2010-08-18 09:02)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h