我有一些非常基本的测试代码。 我有一个类,用来记录其上的所有操作。 我把它绑定到一个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
。 因此,创建至少一个拷贝是强制性的。 然而,我发现,我得到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
),以避免拷贝的荒谬多少?
全部代码和问题实证可以发现在键盘 。