присвоение класса с постоянным членом

Рассмотрим следующий код:

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 copied

A2. Я буду использовать умные указатели.

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?

Ответы на вопрос(7)

Ваш ответ на вопрос