#include <iostream>
class FooParent
{
public:
FooParent(int* new_p_bar)
{
p_bar = new_p_bar;
}
public:
int* p_bar;
};
class FooChild : public FooParent
{
public:
int bar;
public:
FooChild(int new_x)
:FooParent(&bar)
,bar(new_x) \\ point of concern
{}
};
int main()
{
FooChild foo(8);
std::cout << foo.bar << std::endl;
}
위 예제는 내가 원하는대로 작동합니다. 포인터 p_bar
을 bar
에 연결하십시오. 그러나, 내 관심은 생성자가 아직 호출되지 않은 멤버를 가리키고 있다는 것입니다.구성원 개체에 대한 포인터 및 선언 순서
이 코드가 유효 한가, 아니면 표준에 대해 그에 대한 의견이 있습니다. 대안이 아닌 경우.
참고을 : 내 응용 프로그램 bar
에서이 어떤 영향을 미칠 않는 객체 Bar
(안 int
)인가?
생성자가 호출되었을 것입니다. 이니셜 라이저 목록의 순서는 구성 순서와 동일하지 않습니다. 멤버 변수는 클래스의 선언 순서에 따라 초기화됩니다. –
'FooParent'의 c-tor가'Bar'의 주소만을 저장하고'FooParent (& bar)'와'bar (new_x) '사이에 다른 초기화가 없다면 문제가없는 것 같습니다 – borisbn
다른 말로하면 ** 포인터 ** (또는 참조)에서만 작동합니다. 객체의 복사본이 아닙니다. – borisbn