присвоение класса с постоянным членом
Рассмотрим следующий код:
struct s
{
const int id;
s(int _id):
id(_id)
{}
};
// ...
vector<s> v; v.push_back(s(1));
Я получаю ошибку компилятора, которая "const int id"; не может использовать оператор присваивания по умолчанию.
Q1. Why does push_back() need an assignment operator?
A1. Потому что текущий стандарт C ++ так говорит.
Q2. What should I do?
I don't want to give up the const specifier I want the data to be copiedA2. Я буду использовать умные указатели.
Q3. Я придумал «решение», которое кажется довольно безумным:
s& operator =(const s& m)
{
if(this == &m) return *this;
this->~s();
return *new(this) s(m);
}
Должен ли я этого избежать и почему (если так)?Is it safe to use placement new if the object is on the stack?