<< 前 ホーム 次 >>

bakaid: 20061119

寿命の管理するんならヒープからオブジェクトを取った
ほうがいいんだよな。そうじゃないとコピーが生まれ
ちゃうから。

例として、さっきの続きの話で、矩形を描く
コンポーネント。当然、これは矩形を配列で持つわけ
だけど:

public class MyCanvas exntends Component {
    private ArrayList<DrawnRect> rects = new ArrayList<DrawnRect>();
}

で、たとえばアクティブな矩形を複数管理したいとすると:

public class MyCanvas exntends Component {
    private ArrayList<DrawnRect> rects = new ArrayList<DrawnRect>();
    private ArrayList<DrawnRect> actives = new ArrayList<DrawnRect>();
}

みたいになる。もちろん、activesの中にある矩形は、
rectsにあるどれかと同じオブジェクト。これがコピー
だったら面倒なことになる。

つまり、これがC++だとすると、rectsはvector<DrawnRect>
でも構わないんだけど、activesはvector<DrawnRect*>で
なきゃダメだっていうこと。とはいえ、まぁ、rectsも
ヒープ・オブジェクトで管理することになるんだろう。
となると、デストラクタ書くのが面倒だから
vector<hared_ptr<DrawnRect> >で管理したくなるって
ことだ。

class MyCanvas : public Component {
private:
    std::vector<boost::shared_ptr<DrawnRect> > rects;
    std::vector<DrawnRect*> actives;
};

C++の宿命だけど、あんまりこういうことで悩みたく
ないよなあ。

--

あと、上みたいな使い方するからshared_ptr#getは
あったほうがいいと思う。activesもshared_ptrで
管理することはできるんだけど。でも、そんなに
shared_ptr使いまくるんならGC使ったほうがいいんじゃ
ないの。

--

ああ、あと、C++やる人は、vectorとかmapをバンバン
使わないと。

というか、vectorに限らず、オブジェクトのコストは
安いと思わないとダメ。

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails