Я ответил на вопрос о 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<int*> (&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?