Z jednej strony stosowanie klauzuli
NOCOPY może nam pomóc – zwłaszcza przy przekazywaniu przez
parametr typu OUT dużych wartości np. długich tablic albo dużych
obiektów. Z drugiej strony, jeśli np. w procedurze nastąpi jakiś
wyjątek, to w naszej przekazanej zmiennej może znaleźć się coś
innego niż byśmy się spodziewali. Poniżej przedstawiam przykład
takiej sytuacji:
Jak widzimy, w wyniku wywołanego
wyjątku, przetwarzanie w procedurze nie dobiegło do końca. W
efekcie w zmiennej y bloku wywołującego znalazł się tekst „W
trakcie przetwarzania” zamiast „Oryginalny oryginał”
A co będzie jeśli nie użyjemy klauzuli NO COPY w przytoczonym przykładzie? (I dlaczego) Na moje - niezbyt wyrobione - wyczucie NO COPY przy OUT nie powinno nic zmienić - oczywiście poza zmienioną obsługą pamięci.
OdpowiedzUsuńCzy po przejściu do obsługi wyjątku nie jest zwracana zmienna?
Rozumiał bym gdyby wyjątek nie był obsługiwany w pełni wewnątrz procedury,
PS Dziś pierwszy raz przeglądam Twój blog, więc jeśli gdzieś (dokładnie) omówiłeś sposoby przekazywania parametrów, to przepraszam za zawracanie głowy.