Dav*_*rtz 12 c++ boost-bind boost-function
我有一些非常基本的测试代码.我有一个类,只记录它上面的所有操作.我将它绑定到这样的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");
}
Run Code Online (Sandbox Code Playgroud)
我希望函数对象包含一个副本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
Run Code Online (Sandbox Code Playgroud)
我不能使用ref或cref因为我需要它来制作对象的副本.我做错了什么吗?或者我是否需要使用包装器(如boost::shared_ptr)以避免荒谬的副本数量?
可以在Codepad上找到完整的代码和问题演示.
小智 3
如果删除“func =”赋值部分,副本数将降低到 4,这比 13 好得多。
template <class F>
void callF(F fun)
{
}
callF(boost::bind(&func, fl));
Run Code Online (Sandbox Code Playgroud)
所以解决方案很简单 - 不要使用 boost::function
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |