#include <memory>
#include <functional>
class A{ //non-copyable
std::unique_ptr<int> a;
public:
void operator()(){} //non-const
};
void func(std::function<void(void)> f)
{}
int main()
{
A fobj;
func(fobj);
return 0;
}
如上,需要传递一个A的函数对象给func,并且fobj不能是const型的。怎样实现呢?
有以下方案:
用A的引用。缺點:A被銷毀時引用隨之失效。
透過移動語意建構一個shared_ptr。缺點:額外的運行時開銷,需要A可移動構造。
或透過一個在拷貝時移動物件的wrapper來實現(需要A可移動構造):