Рассмотрим следующий код:Принудительно жизни родительского объекта
class Child {
vector<Object>::iterator it;
}
class Parent {
vector<Object> objects;
Child getChild(int idx) {
Child ret;
ret.it = objects.begin() + idx;
return ret;
}
}
Очевидно, что ребенок не должен переживет своего родителя, но я ожидаю, что это будет разумно попытаться вызвать что-то вроде Child childThing = getParent().getChild(5)
. Как я могу это предотвратить? Есть ли образец для обеспечения сохранения экземпляра Parent
? Если возможно, я не хочу копировать objects
, так как его содержимое довольно сложно.
Вы не хотите копировать объект, но копируете Child 'ret' ... – Jarod42
В чем смысл этого кода? 'Child :: it' выглядит как обещание висячего итератора – wasthishelpful
@ Jarod42' objects' - это вектор в 'Parent'. Копирование «Ребенок» в порядке, я просто не хочу копировать вектор в возвращаемый ребенок :) – Managarm