原文:绝对不要在 构造函数/析构函数 中调用虚函数

今天为了查一个重复delete的bug,在析构函数中调用了一个虚函数 toString,想在对象析够前打印对象信息,结果发现打印出来全都是基类的,后来仔细研究了这个问题,先说结论: ,绝对不要在构造函数和析构函数中调用虚函数,他们都不是动态绑定的。 ,如果析构函数是虚函数,那么可以看到类似动态绑定的效果,但这并不是动态绑定,也并不意味着我们可以随意在析构函数中调用 间接调用虚函数 ,如果基类存在虚 ...

2016-02-20 23:19 0 1774 推荐指数:

查看详情

【C++】不要在构造函数析构函数调用函数

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

Mon Aug 24 19:31:00 CST 2015 0 5023
构造函数析构函数可以调用调用函数

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

Mon Sep 16 04:10:00 CST 2019 0 1615
构造函数析构函数能是函数吗?

1. 为什么构造函数不能为函数函数调用需要函数表指针,而该指针存放在对象的内容空间中;若构造函数声明为函数,那么由于对象还未创建,还没有内存空间,更没有函数表地址用来调用函数——构造函数了。 2. 为什么析构函数可以为函数,如果不设为函数 ...

Thu Sep 21 03:42:00 CST 2017 0 1523
为什么不要在构造函数调用函数

先看一段在构造函数中直接调用函数的代码:   这里的结果将打印:1。   这表明第6行执行的的是Base::Foo()而不是Derive::Foo(),也就是说:函数构造函数“不起作用”。为什么?   当实例化一个派生类对象时,首先进行基类部分的构造,然后再进行派生类 ...

Sat Apr 28 20:57:00 CST 2012 2 14078
C++构造函数析构函数调用函数

https://blog.csdn.net/K346K346/article/details/49872023 虽然可以对函数进行实调用,但程序员编写函数的本意应该是实现动态联编。在构造函数调用函数函数的入口地址是在编译时静态确定的,并未实现调用。但是为什么在构造函数调用 ...

Wed Oct 21 22:57:00 CST 2020 0 411
能直接调用析构函数,不能直接调用构造函数

  在我们进行面向对象程序设计的时候,我们肯定要设计自己的类,这样一来,我们就需要设计自己需要的构造函数析构函数,那么我们可以通过指针直接调用构造函数析构函数吗? 进行验证: #include <iostream> using namespace std; //程序说明 ...

Thu Apr 26 08:04:00 CST 2018 0 954
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM