Создание / удаление объекта

xneo7
Offline
Зарегистрирован: 26.10.2013

Здравствуйте. Разъясните следующий нюанс плиз. Код:

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;". По идее в момент выхода из метода он должен автоматически уничтожиться и использовать возвращаемый результат нельзя? Или не так?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Формально возвратится *копия* локального объекта. Но реально, может и не копия, зависит от реализации. Но Вас это не должно волновать. Короче говоря, здесь всё корректно, возвратится объект. Правильный объект.

 

xneo7
Offline
Зарегистрирован: 26.10.2013

Дошло :) Мы же возвращаем копию самого объекта а не указатель на него :)

Я делфист, привык что там объект это всегда указатель :)

Спасибо.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Очень сомневаюсь что из подпрограммы в стеке у ардуины вернется целый стринг . Там то же будет указатель. В приведенном вами коде не обнаружил никаких отличий от дельфи в плане передачи данных обратно.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В чем сомнения? Для ардуино поменяли стандарты?
В Дельфи скорей всего тоже самое, проверить не на чем.

xneo7
Offline
Зарегистрирован: 26.10.2013

В делфи нету такого понятия как "статический объект". Можно описать только указатель а потом динамически создать объект.

Такой код как в примере вернёт именно указатель на объект который создан внутри метода. И его придётся самому уничтожать после использования результата или если он уничтожится внутри метода то снаружи будет ошибка обращения :)