C++

レガシーコードと shared_ptr

C++

もうちょっと続くんじゃ。http://shinh.skr.jp/m/?date=20110226#p03 基本カスタムデリータとか使った時点で負けてる感が強いというか…全く正しいです…設計まともなら、カスタムデリータとかまあ普通出番ないですね。これは重ファク*1です。 あと shared_ptr…

スレッドと所有権

C++

スレッド、というかスレッドのスタックや TLS っていうのは、通常所有することのできない、レアなオモシロリソースなんですよね。物理デバイスに紐づいたリソースとかもそうですけど。http://twitter.com/#!/Cryolite/status/41392398366015488 作成したスレ…

Boost.勉強会 #4

無闇にでかいというだけであまり好きでなくなってきた Boost ですが(というか、「Boost が」好きだったことがあっただろうか?)、勉強会がありました。それで発表したらしいです。適当ですがプレゼンおいときます。https://docs.google.com/present/edit?i…

null 文字で分割する

あまりないと思いますが MULTI_SZ と格闘する時とかは null 文字で文字列を分割したい、ということがあるかもしれません。 一々 std::find 使って書くのは面倒なので、boost が使えるなら boost::algorithm::split を使っておきましょう。 しかし何も考えず…

循環参照と所有権の共有

循環参照というと C++ では下のようなコードのことを指すわけですが、 struct A { shared_ptr<B> bp; }; struct B { shared_ptr<A> ap; }; shared_ptr<A> ap(new A()); shared_ptr<B> bp(new B()); ap->bp = bp; bp->ap = ap; これに対する解決として weak_ptr を使うと</b></a></a></b>…

循環参照と所有権の共有訂正

なんか完全に間違えてました。本来は既に管理しているオブジェクトの一部をさす時に使うためのものなので、カスタムデリータが必要なんでした。 struct B; struct A { weak_ptr<B> b; }; struct B { weak_ptr<A> a; }; struct Deleter { Deleter(B* b) : b(b) { } </a></b>…

mutable

C++

別に自身の直接のメンバじゃなくてもよかったんですね。 struct A { mutable int i; }; struct B { void f() const { a.i = 0; } A a; }; 知らなかったというか、考えたことがなかった。あと const と同じで別に推移的ではない。

プログラミングの魔導書を読みました

C++

プログラミングの魔導書を読みました。面白かったところだけ、軽く感想など書いてみます。Hello, C++ World! は kinaba さんのこの話がよりまとまったもの。本が出る前にちらっと内容は伺っていたんですが、矢張り面白かったです。たまに思うんですが kinaba…

include 死んじゃえというはなし

C++

元のやりとりが imihu なので意味が分からない話になってしまいましたが、そもそも目的の違う物を比較して、便利だとか不便だとか言っているのはよく分からない、ということが言いたかったのでした。最初からそういえばよかった。そして、比較とかしなくても…

C++ クイズ

C++

#include <cstdio> template <typename T> struct id { typedef T type; }; template <typename T> void f(T){ printf("T\n"); } template <typename T> void f(typename id<T>::type){ printf("id<T>::type\n"); } int main(){ f(0); f<int>(0); return 0; } 何がでるかな♪何がでるかな♪</int></t></t></typename></typename></typename></cstdio>