Да, возможно иметь конструктор с именем параметра, аналогичным классу.
Возможны две ситуации:
В вашем коде:
mapped_region(const mapped_region &);
представляет конструктор копирования, а:
mapped_region(mapped_region &&other);
представляет конструктор Move
Конструктор копирования используется для создания копий вашего объекта класса. Всякий раз, когда вы передаете объект класса в качестве аргумента функции по значению или требуется копия вашего объекта класса, компилятор вызывает конструктор копирования для создания этого объекта.
Если вы хотите запретить пользователям вашего класса создавать копии вашего объекта класса, вы объявляете функции копирования ( конструктор копирования & оператор копирования назначения =
) как private
, и это то, что ваш код делает в этом случае, он запрещает пользователям вашего кода создавать любые копии вашего класса mapped_region
. Обратите внимание, что по умолчанию для класса указан спецификатор доступа private
.
Поскольку ваш код объявляет конструктор Move, я предполагаю, что вы используете C ++ 11 и, следовательно, лучший способ достичь желаемой функциональности здесь - это использовать , явно удаляя специальные функции-члены предоставлено в C ++ 11.
Например:
class mapped_region{
mapped_region & operator=(const mapped_region&) = delete;
mapped_region(const mapped_region&) = delete;
mapped_region() = default;
};