Как дать понять пользователю, что функция выделила память (С++)?

У меня почти нет коммерческого опыта C++, поэтому возможно вопрос глупый.

Вопрос по организации кода. Предположим, некая функция моей библиотеки возвращает массив объектов:
class A {
public:
	MyObject** findObjects();
};

Пользователь видит только заголовочный файл, он создает экземпляр класса A, вызывает у него функцию findObjects. В результате он получает массив из объектов. То, что он должен удалить созданный экземпляр, когда закончит с ним работать, понятно, а как объяснить ему, что надо удалить возвращенный массив, да ещё и сами объекты в нем?

Или нужно избегать таких ситуаций? И как их тогда избегать?

Спасибо.
  • Вопрос задан
  • 2624 просмотра
Решения вопроса 2
@alexanius
Избегайте таких ситуаций. В C++ множество усилий было направлено на то чтобы избавиться от гуляющих указателей. Используйте контейнеры (vector, list) или умные указатели (std::shared_ptr).
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Лучше всего, если ваш класс A предоставит интерфейс для работы с объектами и сам будет следить за корректным освобождением памяти. Вместо вызова findObjects используйте конструктор класса, освобождайте память в деструкторе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
0x3f00
@0x3f00
Приложение не должно удалять объекты, созданные в библиотеке: возникнут серьезные проблемы, если приложение будет скомпилировано с другими опциями и иметь другой механизм new и delete. Поэтому библиотеке нужна отдельная функция для освобождения выделенных ею объектов.
Ответ написан
Комментировать
@pigah
а разве массив не принадлежит созданному экземпляру?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы