У меня есть (для меня) сложный объект с примерно 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))
{}
Затем повторите, как указано выше, для других конструкторов. Есть ли какой-нибудь разумный способ использовать конструктор по умолчанию для этого, а затем изменить результаты для других конструкторов?