przypisanie klasy ze stałym elementem

Rozważ następujący kod:

struct s
{
    const int id;

    s(int _id):
        id(_id)
    {}
};
// ...
vector<s> v;  v.push_back(s(1));

Dostaję błąd kompilatora, który „const int id” nie może używać domyślnego operatora przypisania.

Q1. Dlaczego push_back () potrzebuje operatora przypisania?
A1. Ponieważ obecny standard c ++ tak mówi.

Q2. Co powinienem zrobić?

Nie chcę rezygnować ze specyfikatora constChcę, aby dane zostały skopiowane

 A2. Użyję inteligentnych wskaźników.

Q3. Wymyśliłem „rozwiązanie”, które wydaje się dość szalone:

s& operator =(const s& m)
{
    if(this == &m) return *this;
    this->~s();
    return *new(this) s(m);
}

Czy powinienem tego unikać i dlaczego (jeśli tak)?Czy bezpieczne jest używanie nowego miejsca, jeśli obiekt znajduje się na stosie?

questionAnswers(7)

yourAnswerToTheQuestion