Информация об изменениях

Сообщение Re[4]: Впал в ступор увидев такое от 16.03.2019 15:01

Изменено 16.03.2019 15:02 Croessmah

Re[4]: Впал в ступор увидев такое
Здравствуйте, rg45, Вы писали:

R>ибо защитить инкапсулированные данные становится просто невозможно:


Вы можете в конструкторе копирования сравнить this с адресом переданного объекта, как это обычно делают в операторе присваивания.


A(A const & src): p((error_if_this(src), src.p)) {
}

void error_if_this(A const & src)
{
assert(this != &src);
}


R> Нет, не может быть, чтобы это было разрешенным способом инициализации для не POD-типов!


Дело в доступности самого имени в этом контексте, а не том является ли тип POD'ом. У компилятора нет физической способности проверить передаете Вы в конструктор копирования этот же объект или какой-то другой:

A const & at(A const *);
//...
A a(at(&a));//Неизвестно вернет at ссылку на a или на другой объект
Re[4]: Впал в ступор увидев такое
Здравствуйте, rg45, Вы писали:

R>ибо защитить инкапсулированные данные становится просто невозможно:


Вы можете в конструкторе копирования сравнить this с адресом переданного объекта, как это обычно делают в операторе присваивания.


A(A const & src): p((error_if_this(src), src.p)) {
}

void error_if_this(A const & src)
{
    assert(this != &src);
}



R> Нет, не может быть, чтобы это было разрешенным способом инициализации для не POD-типов!


Дело в доступности самого имени в этом контексте, а не том является ли тип POD'ом. У компилятора нет физической способности проверить передаете Вы в конструктор копирования этот же объект или какой-то другой:

A const & at(A const *);
//...
A a(at(&a));//Неизвестно вернет at ссылку на a или на другой объект