У меня есть класс, который содержит вектор указателей объектов. У меня есть функция GetObject (..) в этом классе, которая просматривает вектор, находит желаемый объект и возвращает указатель на него. Однако, если пользователь класса делает delete() на возвращаемом указателе, моя программа выйдет из строя, потому что у вектора все еще есть указатель на этот, теперь недействительный объект. Итак, в моем классе GetObject() я могу вернуть указатель на const, но это не решает проблему, потому что вы все равно можете удалить объект. Объект изменен, поэтому я не могу вернуть указатель на объект const. Я предполагаю, что могу предотвратить удаление, возвращая ссылку на объект, но у меня есть функция, возвращающая NULL, если есть ошибка. Я думаю, я могу передать обратно ссылку на объект с помощью параметров, а затем вернуться и номер ошибки как этотКак предотвратить удаление указателя без использования const?
//-1 on object on found. 0 for success. Object is passed back in
// the function parameter result.
int MyObject::GetObject(int object_id, Item& result)
Является ли это лучшим решением для такой ситуации?
+1: Самая важная причина, по которой это хорошее решение, заключается в том, что с помощью умного указателя они больше не могут напрямую вызывать удаление объекта, не имея явно явно неправильных/явно злых хаков. Есть и другие преимущества, как уже писал Джеймс, но это тот самый, который наиболее применим к вопросу. –