シングルスレッドで走っていたプログラムを並列で走らせようとしたら案の定困ったことが起きたりしたので、メモ。Chinese Restaurant Processとかでポインタを使ったりしていて、tableに座っている客の数を増減させたりする。生ポインタはあれなので、スマートポインタにつっこんでいるが、コピーしたときにポインタが指してる先が同じなことから客の数がマイナスになったりしていた。これじゃいかん。 ai-aさんに質問したところ、コピーコンストラクタや代入演算子を自分で再定義してあげる必要があるとのこと。試しにこんな感じで書いてみた。コピーコンストラクタを書かないと一回しかMyCounterクラスのオブジェクトは生成されないが、コピーコンストラクタを定義してあげると二回生まれて二回死ぬようになってくれる。 #include <iostream> #include <boost/share