Я ответил на вопрос о std :: vector объектов и константной корректности и получил комментарий о неопределенном поведении. Я не согласен, поэтому у меня есть вопрос.
Рассмотрим класс с членом const:
class A {
public:
const int c; // must not be modified!
A(int c) : c(c) {}
A(const A& copy) : c(copy.c) { }
// No assignment operator
};
Я хочу иметь оператор присваивания, но не хочу использовать const_cast
, как в следующем коде из одного из ответов:
A& operator=(const A& assign)
{
*const_cast (&c)= assign.c; // very very bad, IMHO, it is undefined behavior
return *this;
}
Мое решение:
A& operator=(const A& right)
{
if (this == &right) return *this;
this->~A()
new (this) A(right);
return *this;
}
Есть ли у меня неопределенное поведение ( UB)?
Что было бы решением без UB?