原文:为什么不要在构造函数中调用虚函数

先看一段在构造函数中直接调用虚函数的代码: 这里的结果将打印: 。 这表明第 行执行的的是Base::Foo 而不是Derive::Foo ,也就是说:虚函数在构造函数中 不起作用 。为什么 当实例化一个派生类对象时,首先进行基类部分的构造,然后再进行派生类部分的构造。即创建Derive对象时,会先调用Base的构造函数,再调用Derive的构造函数。 当在构造基类部分时,派生类还没被完全创建,从 ...

2012-04-28 12:57 2 14078 推荐指数:

查看详情

绝对不要在 构造函数/析构函数 调用函数

今天为了查一个重复delete的bug,在析构函数调用了一个函数 toString,想在对象析够前打印对象信息,结果发现打印出来全都是基类的,后来仔细研究了这个问题,先说结论: 1,绝对不要在构造函数和析构函数调用函数,他们都不是动态绑定的。 2,如果析构函数函数 ...

Sun Feb 21 07:19:00 CST 2016 0 1774
【C++】不要在构造函数或析构函数调用函数

  这个问题来自于《Effective C++》条款9:永远不要在构造函数或析构函数调用函数 。   假设有如下代码:    现在,请分析执行下列代码调用时所发生的事情:   很明显,一个 BuyTransaction类构造器被调用。但是,首先调用 ...

Mon Aug 24 19:31:00 CST 2015 0 5023
要在构造函数调用可重写的方法

原因 非密封类型的构造函数调用其类定义的方法。 规则说明 调用方法时,直到运行时之前都不会选择执行该方法的实际类型。构造函数调用方法时,可能尚未执行调用该方法的实例的构造函数。 如何修复冲突 ...

Thu Jun 29 18:14:00 CST 2017 0 1638
C++构造函数不能调用函数

构造函数调用函数,并不会产生多态的效果,就跟普通函数一样。 c++ primer 第四版497页15.4.5构造函数和析构函数讲到,如果在构造函数或析构函数调用函数,则运行的是为构造函数或析构函数自身类型定义的版本。另外,必须通过基类类型的引用或指针进行函数调用才会发生多态 ...

Mon Aug 22 22:18:00 CST 2016 0 1774
构造函数和析构函数可以调用调用函数

可以,函数底层实现原理(但是最好不要在构造和析构函数调用) 可以,但是没有动态绑定的效果,父类构造函数调用的仍然是父类版本的函数,子类调用的仍然是子类版本的函数。 effictive c++第九条,绝不在构造和析构过程调用virtual,因为构造函数的base的函数 ...

Mon Sep 16 04:10:00 CST 2019 0 1615
构造函数为什么不能是函数

1. 从存储空间角度,函数对应一个指向vtable函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数 ...

Wed Aug 29 03:23:00 CST 2012 1 24273
构造函数为什么不能是函数

从存储空间角度看 函数相应一个指向vtable函数表的指针,这大家都知道,但是这个指向vtable的指针事实上是存储在对象的内存空间的。 问题出来了,假设构造函数的。就须要通过 vtable来调用。但是对象还没有实例化,也就是内存空间还没有,怎么找vtable ...

Sun Dec 20 02:50:00 CST 2015 0 3161
Java在构造函数调用其它构造函数

在Java构造函数调用其它构造函数的方式与C++不同,需要使用this关键字,而不是像C++直接使用构造函数名来调用。 运行结果为: ...

Tue May 05 17:50:00 CST 2020 0 3769
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM