かなり基本的なテストコードがあります。すべての操作をログに記録するだけのクラスがあります。boost::function
私はそれを次のようなオブジェクトにバインドしました:
void Function(const Foo&)
{
printf("Function invoked\n");
}
// ...
boost::function<void(void)> func;
{
Foo f;
printf("\nConstructing function\n");
func = boost::bind(&Function, f);
printf("Construction complete\n\n");
}
関数オブジェクトにはのコピーが含まれていると思いますf
。したがって、少なくとも1つのコピーを作成する必要があります。しかし、私は13の一時的なものを取得していることがわかりました。出力は次のとおりです。
Constructing function
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::~Foo
Foo::Foo(const Foo&)
Foo::~Foo
Foo::~Foo
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::Foo(const Foo&)
Foo::~Foo
Foo::~Foo
Foo::~Foo
Foo::~Foo
Foo::~Foo
Foo::Foo(const Foo&)
Foo::~Foo
Foo::Foo(const Foo&)
Foo::~Foo
Foo::~Foo
Foo::~Foo
Foo::~Foo
Construction complete
オブジェクトのコピーを作成するために使用できないref
か、必要なためです。cref
私はひどく間違ったことをしていますか?boost::shared_ptr
または、不条理な数のコピーを避けるために、ラッパー(のような)を使用する必要がありますか?
完全なコードと問題のデモンストレーションはCodepadにあります。