私はこの質問をしました。私の質問は、これがどのように機能するかです。詳しく説明すると、まだ初期化されていないオブジェクトをどのように指すことができますか。この MWE を作成したところ、オブジェクトがコピー作成されたものであり、コピーが割り当てられたものではないことがわかります。つまり、オブジェクトはまだ初期化されていませんが、それを指すことができます。
#include <iostream>
class Foo {
public:
int x;
Foo(const Foo& ori_foo) {
std::cout << "constructor" << std::endl;
x = ori_foo.x;
}
Foo& operator = (const Foo& ori_foo) {
std::cout << "operator =" << std::endl;
x = ori_foo.x;
return *this;
}
Foo(int new_x) {
x = new_x;
}
};
class BarParent {
public:
Foo *p_foo;
BarParent(Foo* new_p_foo) : p_foo(new_p_foo)
{
std::cout << (*new_p_foo).x << std::endl;
}
};
class BarChild : public BarParent {
public:
Foo foo;
BarChild(Foo new_foo)
:BarParent(&foo) //pointer to member not yet initialised
,foo(new_foo) // order of initilization POINT OF INTEREST
{}
};
int main() {
Foo foo(101);
BarChild bar(foo);
std::cout << bar.p_foo->x << std::endl;
std::cout << bar.foo.x << std::endl;
}
出力:
constructor
0
constructor
101
101
メモリがどのように処理されるかを詳しく説明することを恐れないでください。そして、すべてのメンバーが住んでいる場所。