У меня есть (для меня) сложный объект с примерно 20 членами данных, многие из которых являются указателями на другие классы. Поэтому для конструктора у меня большой длинный, сложный список инициализации. Класс также имеет десяток различных конструкторов, отражающих различные способы создания класса. Большинство из этих инициализированных элементов не изменяются между каждым из этих разных конструкторов.
Меня беспокоит то, что теперь у меня есть большой кусок скопированного (или в основном скопированного) кода, который, если мне нужно добавить нового члена в класс, не может попасть в каждый из списков инициализации конструктора.
class Object
{
Object();
Object(const string &Name);
Object (const string &Name, const string &path);
Object (const string &Name, const bool loadMetadata);
Object (const string &Name, const string &path, const bool loadMetadata);
}
Object::Object() :
name(),
parent_index (0),
rowData (new MemoryRow()),
objectFile (),
rows (new MemoryColumn (object_constants::RowName, OBJECTID, object_constants::ROWS_OID)),
cols (new MemoryColumn (object_constants::ColName, OBJECTID, object_constants::COLS_OID)),
objectName (new MemoryColumn(object_constants::ObjName, STRING, object_constants::short_name_len, object_constants::OBJECTNAME_OID)),
parent (new MemoryColumn(object_constants::ParentName, STRING, object_constants::long_name_len, object_constants::PARENT_OID)),
parentIndex (new MemoryColumn(object_constants::ParentIndex, OBJECTID, object_constants::PARENTINDEX_OID)),
childCount (new MemoryColumn (object_constants::ChildCount, INTEGER, object_constants::CHILD_COUNT_OID)),
childList (new MemoryColumn (object_constants::ChildList, STRING, object_constants::long_name_len, object_constants::CHILD_OID)),
columnNames (new MemoryColumn (object_constants::ColumnNames, STRING, object_constats::short_name_len, object_constants::COLUMN_NAME)),
columnTypes (new MemoryColumn (object_constants::ColumnTypes, INTEGER, object_constants::COLUMN_TYPE)),
columnSizes (new MemoryColumn (object_constants::ColumnSizes, INTEGER, object_constants::COLUMN_SIZE))
{}
Затем повторите, как указано выше для других конструкторов. Есть ли какой-либо умный способ использования конструктора по умолчанию для этого, а затем изменение результатов для других конструкторов?