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 skopiowaneA2. 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?