Сообщение 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'ом. У компилятора нет физической способности проверить передаете Вы в конструктор копирования этот же объект или какой-то другой:
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 с адресом переданного объекта, как это обычно делают в операторе присваивания.
R> Нет, не может быть, чтобы это было разрешенным способом инициализации для не POD-типов!
Дело в доступности самого имени в этом контексте, а не том является ли тип POD'ом. У компилятора нет физической способности проверить передаете Вы в конструктор копирования этот же объект или какой-то другой:
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 или на другой объект