2011年07月13日(水) [長年日記]
■ [c++] deleteしないshared_ptr
deleteしないshared_ptrを使いたいと思ったのだけれど、そんなのが欲しい状況というのはおかしいのかなあと悩んだ。
boost::shared_ptrのマニュアルの「Smart Pointer Programming Techniques」という章に
という項目があって、そこにshared_ptrへ何もしないdeleterを設定する方法が載っていたので、こういうのもアリなんだなと安心した。
■ [c++] boost::shared_ptr#reset(Y* p)を呼んだときのdeleterの扱い
boost::shared_ptrのドキュメントを読んで、deleterを指定して作成したshared_ptrに対してdeleterを指定しないreset(Y* p)を呼んだらdeleterはリセット(デフォルトのdeleterがセット)されそうに思ったけど、はっきりしなかったので試した。
#include <iostream>
#include <boost/shared_ptr.hpp>
class A {
private:
int i;
public:
A(int i) : i(i) {}
~A() { std::cout << "Destructing A(" << i << ")" << std::endl; }
};
struct NullDeleter {
void operator()(const A*) const {}
};
int main() {
boost::shared_ptr<A> a(new A(1), NullDeleter());
a.reset(new A(2));
}
結果、
Destructing A(2)
とだけ出力されたので、A(1)はdeleteされないけどA(2)はdeleteされており、deleterはリセットされていた。
[ツッコミを入れる]