C++ には 2 つのコンストラクターがあり、初期化ロジックが重複しないようにするために、1 つのコンストラクターがもう 1 つのコンストラクターを呼び出します。
#include <iostream>
#include <memory>
using namespace std;
class A
{
int x;
int y;
public:
A(int x)
{
cout << this << endl;
this->x = x;
}
A()
{
cout << this << endl;
A(20);
}
...
};
興味深いのは、A() が A(int) を呼び出していることですが、このポインターは別のアドレスを指しています。どうしてこれなの?それとも、これは g++ のバグですか?
int main(int argc, char *argv[]) {
A* a = new A();
}
0x7fa8dbc009d0 <-- from A()
0x7fff67d660d0 <-- from A(int)