구성되어 :사용 목적 회원들은 내가 간단한 코드 다음 한
#include <iostream>
#include <vector>
template <class Derived>
struct Base
{
Base()
{
static_cast<Derived*>(this)->foo();
}
std::vector<int> m_ints;
};
struct Derived : Base<Derived>
{
Derived() : Base()
{
std::cout << a;
}
void foo()
{
m_ints.push_back(37);
a = 4;
}
int a;
};
int main()
{
Derived d;
return 0;
}
나는 객체가 생성 될 때 생성자를 호출하는 순서에 대해 알고. 생성자는 "most base -> down"에서 호출됩니다. 그래서 Base 생성자에서 Derived 객체는 완전히 구성되지 않았습니다.
1)
그것은Derived::foo
더 터치를
Derived
객체를 할 수없는 경우,
Base
생성자에서
Derived::foo
전화, 안전한가요? 제 말은
a = 4
과 같은 라인이 없을 때
Base
오브젝트를 만지면됩니다.
2) 게시 된 코드를 실행하면 실제로 작동하지만, 그 때 존재하지 않아야하는 a
을 건드리고 있습니다. 일한다는 보장인가? VS2013, VS2010 및 GCC 4.8.1 on Ideone에서 테스트했습니다.
무엇을 하시겠습니까? – BlackMamba
[this] (http://stackoverflow.com/a/23417203/2567683) –