Ссылка или указатель — не важно. Важно, что базовый класс будет сконструирован до того, как сконструированы члены класса-потомка. Ссылку или указатель на такой несконструированный член сформировать можно, но обращаться к ней в конструкторе базового класса нельзя.
Здравствуйте, TailWind, Вы писали:
TW>Извините за детский вопрос TW>Не смог найти в Google
TW>Проблема в том, что вектором не удобно пользоваться по указателю, из-за оператора [] TW>Хочется иметь ссылку TW>Но с ней проблема:
TW>
TW>//---------------------------------------------------------------------------
TW>class A
TW>{
TW> public:
TW> A(vector<ULONG> &v_) : v(v_)
TW> {
TW> // Есть ли гарантия, что вектор уже сконструирован полностью?
TW> }
TW> private:
TW> vector<ULONG> &v;
TW>};
TW>//---------------------------------------------------------------------------
TW>
Члены класса инициализируются в порядке объявления.
Т.е. так делать можно:
class B
{
public:
B() : a(v) // эквивалентно: B() : v(), a(v)
{} // В момент вызова a(v), член v уже сконструированprivate:
vector<ULONG> v;
A a;
};
А так делать нельзя:
class B
{
public:
B() : a(v) // эквивалентно B() : a(v), v()
{}
private:
A a;
vector<ULONG> v;
};
Вообще потенциально опасный код, из-за того что крректность поведения определеяется кодом "удаленным" от точки использования.
Кто-то без злого умысла может потом переупорядочить приватные члены, в рамках рефеакторинга.
Проблема в том, что вектором не удобно пользоваться по указателю, из-за оператора []
Хочется иметь ссылку
Но с ней проблема:
//---------------------------------------------------------------------------class A
{
public:
A(vector<ULONG> &v_) : v(v_)
{
// Есть ли гарантия, что вектор уже сконструирован полностью?
}
private:
vector<ULONG> &v;
};
//---------------------------------------------------------------------------class B
{
public:
B() : a(v)
{
// можно ли так делать?
}
private:
vector<ULONG> v;
//
A a;
};
//---------------------------------------------------------------------------
Здравствуйте, Vamp, Вы писали:
V>Ссылка или указатель — не важно. Важно, что базовый класс будет сконструирован до того, как сконструированы члены класса-потомка. Ссылку или указатель на такой несконструированный член сформировать можно, но обращаться к ней в конструкторе базового класса нельзя.
но тут нет базового класса.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
V>Бес попутал. Мне казалось, что А — предок. Не знаю как я код смотрел.
Да не важно
Главное смысл понятен
В конструкторе не использовать
В остальных местах можно