構造関数の誤解


まずコードを見てください.
#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()