2013-06-26 5 views
0

У меня есть общие указатели в моей программе на C++. После того, как я выделяю память указателям (используя новые), я делаю некоторые вещи в своей программе, а затем мне нужно знать, удалили ли некоторые другие эти указатели или нет. Потому что если указатель был удален, я бы получил ошибку чтения нарушения прав доступа. Есть ли какая-либо функция или какой-либо способ проверить это?Как проверить, сохраняется ли распределение памяти?

+2

Нет. Используйте интеллектуальный указатель, а именно 'std :: shared_ptr' с' std :: weak_ptr'. – GManNickG

+0

Расскажите подробнее о том, что вы делаете со своим бедным указателем и его выделенной памятью после его создания. – Antonio

+1

. Посмотрите на общие указатели повышения - http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/ shared_ptr.htm # пример – OldProgrammer

ответ

3

Я думаю, что когда вы говорите «общий указатель», вы не имеете в виду фактический класс интеллектуальных указателей, например std::shared_ptr или boost:shared_ptr, а просто необработанный указатель, который передается от функции к функции.

Нет надежного, безопасного и кросс-платформенного способа определения достоверности необработанного указателя.

Однако использование классов интеллектуальных указателей облегчит большую нагрузку на управление динамической памятью. Вместо того, чтобы проходить вокруг необработанных указателей, вы проходите вокруг умных указателей. Эти интеллектуальные указатели (по крайней мере, shared_) учитываются по ссылке. Пока по крайней мере одна ссылка на указатель все еще существует, объект, на который указывает, не будет delete. D. После удаления последней ссылки объект автоматически будет delete d.

smart_ptr В приведенной выше ссылке имеется так называемая «сильная ссылка» на контролируемый объект. Есть также интеллектуальный указатель, который поддерживает слабую ссылку на контролируемый объект. Эти слабые указатели не препятствуют удалению объекта и могут быть проверены на достоверность перед использованием управляемого объекта.

Для получения дополнительной информации см. the documentation.