我有一个关于按值传递对象构造和虚拟方法的问题。
我有这样一个虚方法:
typedef boost::function1<void, void*> Task
class ITaskPool
{
//......
virtual AddTask(Task task) = 0;
};
然后是类似的实现
class TaskPool : public ITaskPool
{
//......
AddTask(Task task);
};
如果我这样使用它;
void MyFunc(void* arg)
{
}
int main()
{
TaskPool tp;
tp.AddTask(&MyFunc);
}
Task 对象是否会被创建两次,一次是传递给虚方法时,另一次是传递给派生类的方法时?
谢谢
最佳答案
只会创建一个拷贝。 当您声明一个函数为虚函数时,该派生类的方法将通过动态绑定(bind)被调用。不是先调用方法A再调用方法B的情况。 COmpiler 在运行时决定调用哪个方法。
关于c++ - 按值传递给虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247161/