Я заметил, что g++ достаточно умен, чтобы определить, когда функция возвращает указатель на временную/локальную переменную, например.
В результате:
Код: Выделить всё
warning: address of local variable ‘a’ returned
Есть ли способ определить прототип функции, чтобы он принимал только те указатели, которые, как может определить компилятор, не являются временными. Допустим, у меня есть функция
Есть ли способ заставить g++ жаловаться, если кто-то передает ему указатель на локальный/временный объект? Это запретит людям вызывать barfoo с недопустимыми указателями и потенциально избавит от некоторых неприятных проблем при отладке.
Пример:
Код: Выделить всё
void barfoo(int *a)
{
cerr
Подробнее здесь: [url]https://stackoverflow.com/questions/7234784/can-i-tell-a-function-explicitly-to-not-accept-pointers-to-non-heap-variables[/url]