Рассмотрим следующий код:
struct s
{
const int id;
s(int _id):
id(_id)
{}
};
//...
vector<s> v; v.push_back(s(1));
Я получаю сообщение об ошибке компилятора, что «const int id» не может использовать оператор присваивания по умолчанию.
Q1. Почему для push _назад ()нужен оператор присваивания?
А1. Потому что так говорит текущий стандарт С++.
Q2. Что я должен делать?
А2. Я буду использовать умные указатели.
Q3. Я придумал "решение", которое кажется довольно безумным:
s& operator =(const s& m)
{
if(this == &m) return *this;
this->~s();
return *new(this) s(m);
}
Должен ли я этого избегать и почему (если да )? Безопасно ли использовать новое размещение, если объект находится в стеке?