struct Data {
// some fields
};
struct E : public virtual Data {
// some fields
};
struct A : public E {};
struct B : public E {};
struct EE : A, B {
E& a() {
return *static_cast(this);
}
E& b() {
return *static_cast(this);
}
};
int main() {
std::vector vec;
for (size_t i = 0; i < 10; ++i) {
auto ee = new EE(...);
vec.push_back(ee->a());
vec.push_back(ee->b());
}
// shuffle the `vec`
// your code may go here as well
for (size_t i = 0; i < 20; ++i) {
// your code goes here
}
// At this point All `EE` must be correctly `deleted`
}
Я создаю значения EE и для каждого сохраняю 1 ссылку из a() и 1 ссылку из b() в векторе . После этого я перетасовываю контейнер и перебираю его. После итерации все EE должны быть уничтожены. Как это можно сделать? Есть ли решение, не предполагающее редактирования структуры Data, E и EE?
struct E : public virtual Data { // some fields };
struct A : public E {}; struct B : public E {};
struct EE : A, B { E& a() { return *static_cast(this); } E& b() { return *static_cast(this); } }; [/code] [code]int main() { std::vector vec;
for (size_t i = 0; i < 10; ++i) { auto ee = new EE(...); vec.push_back(ee->a()); vec.push_back(ee->b()); }
// shuffle the `vec`
// your code may go here as well
for (size_t i = 0; i < 20; ++i) { // your code goes here }
// At this point All `EE` must be correctly `deleted` } [/code] Я создаю значения EE и для каждого сохраняю 1 ссылку из a() и 1 ссылку из b() в векторе . После этого я перетасовываю контейнер и перебираю его. После итерации все EE должны быть уничтожены. Как это можно сделать? Есть ли решение, не предполагающее редактирования структуры Data, E и EE?