Создание / удаление объекта
- Войдите на сайт для отправки комментариев
Пнд, 28/04/2014 - 00:03
Здравствуйте. Разъясните следующий нюанс плиз. Код:
String String::substring(unsigned int left, unsigned int right) const { if (left > right) { unsigned int temp = right; right = left; left = temp; } String out; if (left > len) return out; if (right > len) right = len; char temp = buffer[right]; // save the replaced character buffer[right] = '\0'; out = buffer + left; // pointer arithmetic buffer[right] = temp; //restore character return out; }
Здесь внутри метода статически создаётся объект "String out;". По идее в момент выхода из метода он должен автоматически уничтожиться и использовать возвращаемый результат нельзя? Или не так?
Формально возвратится *копия* локального объекта. Но реально, может и не копия, зависит от реализации. Но Вас это не должно волновать. Короче говоря, здесь всё корректно, возвратится объект. Правильный объект.
Дошло :) Мы же возвращаем копию самого объекта а не указатель на него :)
Я делфист, привык что там объект это всегда указатель :)
Спасибо.
Очень сомневаюсь что из подпрограммы в стеке у ардуины вернется целый стринг . Там то же будет указатель. В приведенном вами коде не обнаружил никаких отличий от дельфи в плане передачи данных обратно.
В чем сомнения? Для ардуино поменяли стандарты?
В Дельфи скорей всего тоже самое, проверить не на чем.
В делфи нету такого понятия как "статический объект". Можно описать только указатель а потом динамически создать объект.
Такой код как в примере вернёт именно указатель на объект который создан внутри метода. И его придётся самому уничтожать после использования результата или если он уничтожится внутри метода то снаружи будет ошибка обращения :)