Могу ли я явно указать функции, чтобы она не принимала указатели на переменные, не относящиеся к куче?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я явно указать функции, чтобы она не принимала указатели на переменные, не относящиеся к куче?

Сообщение Anonymous »

Я заметил, что g++ достаточно умен, чтобы определить, когда функция возвращает указатель на временную/локальную переменную, например.

Код: Выделить всё

int *foobar()
{
int a;
return &a;
}
В результате:

Код: Выделить всё

 warning: address of local variable ‘a’ returned
Есть ли способ определить прототип функции, чтобы он принимал только те указатели, которые, как может определить компилятор, не являются временными. Допустим, у меня есть функция

Код: Выделить всё

 barfoo(int *a_int);
Есть ли способ заставить 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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»