c++ - 按值传递给虚拟方法

标签 c++ inheritance

我有一个关于按值传递对象构造和虚拟方法的问题。

我有这样一个虚方法:

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 在运行时决定调用哪个方法。

Polymorphism and Dynamic Binding

关于c++ - 按值传递给虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247161/

相关文章:

c++ - 如果 'decltype' 是静态的,那么为什么三元运算符在模板的尾随返回类型中起作用?

c++ - 回溯:8 象占据整个棋盘

c++ - Redis 性能问题

Java Spring Rest Call使用父类(super class)获取子类

c++ - Impossible expected class-name before ‘{’ token 错误解决

c++ - 多重继承的可变参数宏

ruby - 在 Ruby 中调用 super 方法

c++ - 使用变量列表参数时 va_list 的长度?

C++,错误,Native' 已退出,代码为 -1073741819 (0xc0000005)

Java覆盖实例和静态方法执行