Допустим, у меня есть это:
struct Base {
virtual void swap();
Expensive mem;
};
struct Left : Base {
void swap() override;
};
struct Right : Base {
void swap() override;
};
Учитывая vector<shared_ptr<Base>> foo
, который содержит Left
и Right
объекты.Допустим, элемент 13 был Left
, теперь я хочу, чтобы он был Right
.Я могу сделать что-то вроде:
foo[13] = make_shared<Right>();
Но теперь давайте предположим, что Expensive
очень дорого создавать или копировать, и давайте предположим, что Left
и Right
не содержат своих собственных членов, ониэто просто другой способ манипулирования и интерпретации mem
.Есть ли способ, которым я могу разыграть или сказать элементу 13, что теперь это Right
, не разрушая Left
, который был там?Могу ли я использовать enable_shared_from_this
или подобное для манипулирования уничтожением и реконструкцией, где я мог бы позвонить foo[13].swap()
, и он "стал бы" Right
?