Правильно ли я понимаю, что следующий код правильный и не содержит "подводных камней"?:
#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?
Здравствуйте, σ, Вы писали:
σ>Где-то указан инвариант, что E.m_oA.m_pArr указывает на E.m_arr[0]?
Инвариант явно не указан, но из примера можно подумать что он подразумевался, а следовательно дефолтные конструкторы все сломают. У меня просто невроз такой: если в классе есть голые указатели, в любом виде, то скорее всего нужны и переопределенные конструкторы и операторы копирования. А так это все вопросы к автору