次のコードを検討してください。
struct s
{
const int id;
s(int _id):
id(_id)
{}
};
// ...
vector<s> v; v.push_back(s(1));
「const int id」はデフォルトの代入演算子を使用できないというコンパイラ エラーが発生します。
Q1. push_back() に代入演算子が必要なのはなぜですか?
A1. 現在のC++標準がそう言っているからです。
Q2. 私は何をすべきか?
- const指定子を手放したくない
- データをコピーしたい
A2. スマートポインターを使用します。
Q3. 私はかなり狂っているように見える「解決策」を思いつきました:
s& operator =(const s& m)
{
if(this == &m) return *this;
this->~s();
return *new(this) s(m);
}
私はこれを避けるべきですか、なぜですか (もしそうなら)? オブジェクトがスタック上にある場合、placement new を使用しても安全ですか?