我不明白使用functor和std :: function对下面的代码会发生什么。
我的解释与代码交错(连接的代码是可编译的)。
#include <chrono>
#include <functional>
class O
{
public:
void func();
};
O类有一个func
- 方法来做某事。
class FunctorClass
{
O &o_;
FunctorClass(O &o)
: o_(o) {}
std::chrono::milliseconds operator()()
{
o_.func();
return std::chrono::seconds(1);
}
};
类FunctorClass
接受O
对象的引用,并声明operator()
,它返回一个间隔并调用成员func
的{{1}}。
o_
class TaskLoop
{
std::function<std::chrono::milliseconds(void)> task_;
public:
TaskLoop(std::function<std::chrono::milliseconds(void)> t)
: task_(t)
{}
};
正在启动一个线程并调用TaskLoop
并在此调用返回的时间间隔内休眠。 (如果有的话,在这里省略了线程处理)
task_
在main函数中,我创建了一个int main(void)
{
O o;
TaskLoop loop(FunctorClass(o));
getchar(); // just to have the process waiting
return 0;
}
的对象。在创建O
- 对象时,我认为我创建了一个loop
- 对象,它本身以FunctorClass
为参数。
但这不会发生。 FunctorClass的构造函数是私有的。
此代码使用两个不同版本的GCC(4.8和6.x)编译而没有相关警告。
会发生什么?编译器正在优化,但为什么?
对于冗长的代码感到抱歉,这已经是一个简化的测试用例。
PS:使用o
/ new
执行此操作时,我会收到必要的编译器警告和错误:
shared_ptr