Инициализация внутри класса
От: B0FEE664  
Дата: 24.03.21 14:58
Оценка:
Правильно ли я понимаю, что следующий код правильный и не содержит "подводных камней"?:
#define ARR_SZ 5

struct B
{
  int  m_N;
  char m_name[8]; 
};


struct A
{
  std::size_t m_sz;
  B*          m_pArr;
};


class Use
{
  //... конструкторов нет
  private:
    B      m_arr[ARR_SZ]{};
    A      m_oA{ARR_SZ, m_arr};
};

Use x1{};
Use x2;


x1 и x2 проинициализированы одинаково?
x?.m_oA.m_sz == 5 ?
Все значения массива x?.m_oA.m_pArr установлены в 0?
И каждый день — без права на ошибку...
Re: Инициализация внутри класса
От: Videoman Россия https://hts.tv/
Дата: 24.03.21 16:57
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:


BFE>Правильно ли я понимаю, что следующий код правильный и не содержит "подводных камней"?:


Шутишь ?! Первый же move или copy превратит новый Use в тыкву!
Re[2]: Инициализация внутри класса
От: B0FEE664  
Дата: 24.03.21 17:06
Оценка:
Здравствуйте, Videoman, Вы писали:

BFE>>Правильно ли я понимаю, что следующий код правильный и не содержит "подводных камней"?:

V>Шутишь ?! Первый же move или copy превратит новый Use в тыкву!

Чёрт! Об этом-то я не подумал.
И каждый день — без права на ошибку...
Re[2]: Инициализация внутри класса
От: σ  
Дата: 24.03.21 21:48
Оценка:
BFE>>Правильно ли я понимаю, что следующий код правильный и не содержит "подводных камней"?:

V>Шутишь ?! Первый же move или copy превратит новый Use в тыкву!


Где-то указан инвариант, что E.m_oA.m_pArr указывает на E.m_arr[0]?
Отредактировано 24.03.2021 23:43 σ . Предыдущая версия .
Re[3]: Инициализация внутри класса
От: Videoman Россия https://hts.tv/
Дата: 25.03.21 08:53
Оценка:
Здравствуйте, σ, Вы писали:

σ>Где-то указан инвариант, что E.m_oA.m_pArr указывает на E.m_arr[0]?


Инвариант явно не указан, но из примера можно подумать что он подразумевался, а следовательно дефолтные конструкторы все сломают. У меня просто невроз такой: если в классе есть голые указатели, в любом виде, то скорее всего нужны и переопределенные конструкторы и операторы копирования. А так это все вопросы к автору
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.