构造函数的一个误解
先看一段代码。
#include <iostream>using namespace std;class A {public: A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; }};class B : public A {public: B() { cout << "B()" << endl; } ~B() { cout << "~B()" << endl; } B(int a) { cout << "int a" << endl; }};B func() { cout << "A function" << endl; return B();}int main() { cout << "----1----" << endl; B t(); cout << "----2----" << endl; B(); //B b; //B c(1); return 0;}
?之前调用无参数的构造函数都是形如
B b;
的调用方式,有参数的就如
B c(1);
地去调用。
没试过B t();的调用方式,以为跟B t;的效果是一样的,其实不然。。
B t();相当于声明了一个返回值是B的函数,跟B的构造函数没半点关系。
所以,这段代码的输出为:
?
----1----
----2----
A()
B()
~B()
~A()