Конструктор по умолчанию не вызывается при использовании конструктора копирования, но вы можете добавить конвертирующий конструктор, который создает person
из name
, и делегировать этому конструктору другие конструкторы. Я предлагаю delete
использовать конструктор копирования и заменить его на default
конструктор перемещения. Возможно, вам не нужны два person
с одинаковым идентификатором.
Пример:
#include <iostream>
class person {
public:
int ID;
std::string name;
static int counter;
person(); // default ctor
explicit person(const std::string&); // converting ctor
person(const person &) = delete; // copy ctor deleted to not get two persons
// with the same ID
person(person&&) = default; // move ctor
};
int person::counter = 0;
person::person() :
person("") // delegate
{}
person::person(const std::string& Name) : // colon starts the member initializer list
ID(++counter),
name(Name)
{}
Вы можете заменить отдельный конструктор по умолчанию и конструктор преобразования одним конструктором, используя значение по умолчанию для имени:
person(const std::string& Name = {}) :
ID(++counter),
name(Name)
{}