﻿1
00:00:04,350 --> 00:00:05,430
‫Hallo en welkom.

2
00:00:05,430 --> 00:00:12,630
‫In deze lezing gaan we leren hoe we een aanwijzing kunnen krijgen voor de eigendomshandeling van een component.

3
00:00:12,840 --> 00:00:16,680
‫We gaan uitzoeken wat een aanwijzer is, welke adressen in het geheugen staan,

4
00:00:16,680 --> 00:00:19,560
‫en we gaan ze ook afdrukken in onze logberichten.

5
00:00:19,710 --> 00:00:20,370
‫Laten we erin duiken.

6
00:00:21,150 --> 00:00:27,570
‫Laten we dus even de tijd nemen om een kernconcept te begrijpen van wat er gaande is in het programmeren in

7
00:00:27,570 --> 00:00:29,100
‫het algemeen over variabele adressen.

8
00:00:29,100 --> 00:00:30,750
‫Wat is een adres van een variabele?

9
00:00:30,750 --> 00:00:41,280
‫Welnu, we slaan al onze variabelen op in het geheugen omdat er ram-chips op uw computer zijn en variabelen geheugen nodig hebben om

10
00:00:41,280 --> 00:00:43,890
‫hun gegevens op te slaan.

11
00:00:43,890 --> 00:00:51,790
‫Dus een getal met drijvende komma vereist 32 bits aan gegevens of 64, als het een dubbel geheel getal is, vereist een bepaalde

12
00:00:51,790 --> 00:00:52,680
‫hoeveelheid geheugen.

13
00:00:52,680 --> 00:00:58,080
‫Ook geldt: hoe groter de structs die je hebt of hoe groter de klassen die je hebt, zoals acteurs

14
00:00:58,080 --> 00:01:03,600
‫kunnen erg groot zijn en veel gegevens omvatten, misschien heb je zelfs een paar kilobytes geheugen per acteur nodig, dat soort

15
00:01:03,600 --> 00:01:03,960
‫dingen.

16
00:01:04,620 --> 00:01:12,270
‫Welnu, dat geheugen moet ergens leven op dit grote veld van lege gegevens dat uw geheugenbanken zijn.

17
00:01:12,750 --> 00:01:16,290
‫En die locatie staat bekend als een adres.

18
00:01:16,440 --> 00:01:18,180
‫Dus hoe werkt dit in de praktijk?

19
00:01:18,540 --> 00:01:21,840
‫Stel je voor dat we dit grote veld van nullen en enen hebben.

20
00:01:21,840 --> 00:01:24,900
‫Dat zijn de gegevens op je ram.

21
00:01:25,410 --> 00:01:32,550
‫Welnu, de variabele, een actor-variabele genaamd mijn acteur, moet een bepaalde locatie binnen dat geheugen hebben die is

22
00:01:32,550 --> 00:01:36,900
‫toegewezen om de gegevens in de actor op te slaan.

23
00:01:37,260 --> 00:01:42,030
‫Dus dit rode gedeelte van het geheugen kan zijn waar we de gegevens voor

24
00:01:42,420 --> 00:01:50,580
‫deze ene bepaalde actor opslaan, en het heeft een adres dat gewoonlijk in binair of hexadecimaal wordt aangegeven, dat in wezen alleen de locatie is.

25
00:01:50,580 --> 00:01:57,780
‫Als je begint met het aftellen van alle bytes, alle enen en nullen hier, dan tellen we eigenlijk niet de individuele

26
00:01:57,780 --> 00:01:59,160
‫enen en nullen.

27
00:01:59,160 --> 00:02:03,300
‫We tellen in stappen van acht, maar dat is niet zo belangrijk.

28
00:02:03,300 --> 00:02:04,170
‫We tellen de bytes.

29
00:02:04,680 --> 00:02:07,770
‫Dat is in wezen het adres waar we beginnen.

30
00:02:08,780 --> 00:02:10,880
‫Over onze acteur gesproken.

31
00:02:11,090 --> 00:02:14,150
‫En dan heeft elk type een bepaalde maat.

32
00:02:14,150 --> 00:02:17,960
‫Dus we weten dat de acteur zoveel bytes aan gegevens nodig zou hebben.

33
00:02:17,960 --> 00:02:22,940
‫En dat vertelt ons waar we de gegevens over onze specifieke acteur kunnen vinden.

34
00:02:23,450 --> 00:02:24,830
‫Dus waarom is dit belangrijk?

35
00:02:24,860 --> 00:02:29,360
‫Nou, laten we eens kijken naar de situatie waarin we misschien een kans willen maken.

36
00:02:29,720 --> 00:02:30,650
‫Twee acteurs.

37
00:02:30,650 --> 00:02:34,070
‫We hebben slechts twee variabelen die verwijzen naar dezelfde gegevens.

38
00:02:34,640 --> 00:02:38,200
‫In het naïeve geval zouden we dit gewoon kopiëren.

39
00:02:38,200 --> 00:02:46,820
‫Dus we hebben een stuk geheugen dat is toegewezen aan de my actor-variabele door een ander stuk geheugen dat is toegewezen aan

40
00:02:46,820 --> 00:02:52,040
‫een lege variabele genaamd your actor, waaraan we nog niets hebben toegewezen.

41
00:02:52,640 --> 00:02:59,000
‫En wat we dan willen doen, omdat we willen dat ze dezelfde gegevens bevatten, is dat we de een aan de ander

42
00:02:59,000 --> 00:02:59,450
‫toewijzen.

43
00:02:59,720 --> 00:03:07,010
‫En dat resulteert er in wezen in dat we gewoon een kopie maken van alle stukjes gegevens die in mijn acteur zaten en

44
00:03:07,010 --> 00:03:10,190
‫ze in alle stukjes plaatsen waaruit je acteur bestaat.

45
00:03:10,820 --> 00:03:17,930
‫Dit kan dus een vrij dure procedure zijn, omdat uw CPU elk stuk geheugen in het origineel moet doorlopen

46
00:03:17,930 --> 00:03:22,550
‫en evalueren en op de nieuwe locatie moet plaatsen, wat tijd kost.

47
00:03:22,670 --> 00:03:25,750
‫Er is een manier om dit te omzeilen met behulp van iets dat een aanwijzer wordt genoemd.

48
00:03:25,760 --> 00:03:33,470
‫Dus hier hebben we, in plaats van het geheel van de Mijn acteur op te slaan, een variabele genaamd een

49
00:03:33,470 --> 00:03:38,770
‫mijn acteur of een acteur een acteur-aanwijzer die niet de hele acteur opslaat.

50
00:03:38,780 --> 00:03:42,100
‫Het slaat alleen het adres op waar je een act kunt vinden.

51
00:03:42,110 --> 00:03:46,520
‫U kunt dus zien dat er veel minder geheugen wordt gebruikt om een adres op te slaan.

52
00:03:46,520 --> 00:03:53,930
‫En wat we dan doen, is je acteur, we slaan het adres van mijn acteur op, zodat het uiteindelijk naar de

53
00:03:54,260 --> 00:03:58,880
‫originele acteur verwijst in plaats van de gegevens te kopiëren, vandaar de naamaanwijzer.

54
00:03:59,360 --> 00:04:01,820
‫Dit is niet de eigenlijke syntaxis in C++.

55
00:04:01,820 --> 00:04:04,130
‫In C++ is de syntaxis veel compacter.

56
00:04:04,640 --> 00:04:09,610
‫We zeggen dat iets een pointer is door een sterretje achter het type te zetten.

57
00:04:09,620 --> 00:04:17,930
‫Dus een actor-ster betekent dat dit een actor-aanwijzer is en om het adres van een variabele te krijgen, gebruiken we een ampersand die

58
00:04:17,930 --> 00:04:19,670
‫we niet zullen gebruiken.

59
00:04:19,670 --> 00:04:24,680
‫Maak nog veel gebruik van dit adres, want er zijn veel functies in Unreal die pointers

60
00:04:24,680 --> 00:04:25,190
‫retourneren.

61
00:04:25,190 --> 00:04:30,860
‫Dus we moeten alleen weten hoe we die punten moeten gebruiken in plaats van ze voorlopig te maken.

62
00:04:31,730 --> 00:04:40,060
‫Dus een dergelijke functie waarmee we toegang kunnen krijgen tot andere objecten in onze scène, is get ona.

63
00:04:40,070 --> 00:04:46,310
‫Dus waarom is dit van toepassing als we een onderdeel hebben dat eigendom is van een acteur?

64
00:04:46,490 --> 00:04:53,600
‫Dus als we wilden dat dit onderdeel met onze acteur zou praten, om zijn locatie te krijgen, zijn locatie in te stellen en

65
00:04:53,600 --> 00:04:58,370
‫dat soort dingen te doen, dan moeten we een verwijzing naar die acteur kunnen krijgen.

66
00:04:58,370 --> 00:04:59,780
‫We willen er geen kopie van maken.

67
00:05:00,020 --> 00:05:03,290
‫In feite willen we er geen kopie van zeggen omdat we de acteur willen veranderen.

68
00:05:03,290 --> 00:05:06,950
‫Als we een wijziging aanbrengen in een kopie, zou deze niet echt in de scène verschijnen.

69
00:05:07,430 --> 00:05:13,640
‫We moeten dus een variabele kunnen opslaan die een pointer naar een actor is.

70
00:05:14,330 --> 00:05:19,580
‫De manier waarop we dit doen, zoals we zojuist in de dia's hebben gezien, is door een acteurstype te hebben.

71
00:05:19,760 --> 00:05:25,940
‫Maar dan zetten we een ster aan het einde die ons vertelt dat dit geen acteur is die hier wordt opgeslagen, dit is

72
00:05:25,940 --> 00:05:28,670
‫gewoon het adres van een acteur die wordt opgeslagen.

73
00:05:29,240 --> 00:05:36,530
‫Dus we nemen de acteur en we gaan deze eigenaar noemen, en dan gaan we dat gelijk stellen aan het resultaat

74
00:05:36,530 --> 00:05:39,080
‫van het bellen van eigenaar krijgen.

75
00:05:39,080 --> 00:05:47,010
‫Dus die eigenaar krijgen is een functie van een actor-component waarmee je een eigenaar-aanwijzer kunt krijgen, een actor-aanwijzer kunt krijgen

76
00:05:47,030 --> 00:05:53,480
‫die naar de eigenaar wijst, en een puntkomma aan het einde van die regel kunt plaatsen.

77
00:05:53,720 --> 00:06:00,740
‫En wat we hier hebben is een variabele die het adres opslaat van een acteur die eigenaar is van dit specifieke

78
00:06:00,740 --> 00:06:01,400
‫onderdeel.

79
00:06:01,760 --> 00:06:07,550
‫Dus ik zou je willen uitdagen om iets te doen door het adres van deze variabele af te drukken.

80
00:06:07,550 --> 00:06:12,530
‫Gebruik dus de actor-variabele en gebruik het percentage dat u opmaakt.

81
00:06:12,590 --> 00:06:14,690
‫Geef het einde van de logboeken op.

82
00:06:14,690 --> 00:06:19,490
‫Dus procent u betekent in wezen dat u een geheel getal zonder teken gebruikt.

83
00:06:19,490 --> 00:06:24,980
‫Dat betekent een geheel getal dat niet negatief kan zijn, wat logisch is omdat adressen niet negatief kunnen

84
00:06:25,790 --> 00:06:32,060
‫zijn als we het hebben over waar we geheugen kunnen vinden en dan uitzoeken wat het afdrukt, ga spelen, bekijk het logbericht,

85
00:06:32,060 --> 00:06:33,710
‫kijk wat het print uit.

86
00:06:34,190 --> 00:06:37,760
‫Verandert het tussen verschillende spelen als je stopt met spelen en opnieuw begint te spelen?

87
00:06:38,090 --> 00:06:41,720
‫En hoe zit het als de film op meerdere acteurs draait?

88
00:06:41,900 --> 00:06:45,650
‫Zijn er meerdere verschillende adressen afgedrukt in de console?

89
00:06:45,650 --> 00:06:48,380
‫Pauzeer de video en doe wat onderzoek.

90
00:06:51,940 --> 00:06:52,360
‫Oké.

91
00:06:52,360 --> 00:06:53,050
‫Welkom terug.

92
00:06:53,500 --> 00:07:03,370
‫Dus we gaan naar dit andere logboek en we zeggen verhuizer, eigen adres, dubbele punt.

93
00:07:03,400 --> 00:07:07,270
‫Weet je, dat is waar het het punt van waarde gaat plaatsen.

94
00:07:07,990 --> 00:07:10,150
‫En dan gaan we de werkelijke aanwijzer plaatsen.

95
00:07:10,150 --> 00:07:12,160
‫Dus we gaan de eigenaar hier hebben.

96
00:07:12,940 --> 00:07:16,120
‫Dus het gaat het adres van de eigenaar uitprinten.

97
00:07:16,540 --> 00:07:18,970
‫Laten we overgaan op onwerkelijk.

98
00:07:19,180 --> 00:07:21,670
‫Raakt controle alt f 11.

99
00:07:21,940 --> 00:07:24,550
‫En als dat klaar is met compileren, gaan we op play drukken.

100
00:07:24,550 --> 00:07:29,680
‫En wat we zien is dat het logbericht 'Verplaats het adres van de eigenaar' binnenkomt en het geeft

101
00:07:29,680 --> 00:07:32,050
‫ons een heel groot aantal voor dit adres.

102
00:07:32,440 --> 00:07:36,250
‫Wat als ik stop met spelen en voor een seconde opnieuw speel?

103
00:07:36,490 --> 00:07:42,700
‫Je kunt zien dat het adres behoorlijk verschillend is en dat komt omdat elke keer dat

104
00:07:43,180 --> 00:07:51,250
‫we op play drukken, Unreal een hele nieuwe reeks acteurs in de scene creëert, in principe klaar om te spelen, vanaf het

105
00:07:51,250 --> 00:07:51,810
‫begin.

106
00:07:51,820 --> 00:07:57,160
‫Daarom zien we elke keer dat we op play drukken nieuwe adreslocaties.

107
00:07:57,190 --> 00:08:04,900
‫Wat gebeurt er als ik bijvoorbeeld naar deze pilaar ga en een zet, een onderdeel ook aan de pilaar toevoeg, en we op play

108
00:08:04,900 --> 00:08:07,990
‫drukken en naar de onderkant van mijn logs scrollen.

109
00:08:07,990 --> 00:08:15,220
‫Je kunt zien dat er hier telkens twee verschillende adressen worden uitgeprint omdat er twee verschillende

110
00:08:15,220 --> 00:08:20,680
‫actoren zijn die op twee verschillende locaties in het geheugen zijn opgeslagen.

111
00:08:21,010 --> 00:08:25,930
‫Dit zijn dus de twee adressen en je kunt zien dat er nogal wat megabytes

112
00:08:25,930 --> 00:08:31,660
‫aan verschil zijn tussen deze twee adressen, wat je alleen maar vertelt hoeveel informatie in het geheugen wordt opgeslagen

113
00:08:31,870 --> 00:08:38,040
‫door Unreal en ook waarom het belangrijk is om efficiënt te zijn met het niet maken van te veel exemplaren.

114
00:08:38,350 --> 00:08:39,490
‫Dat was het voor deze lezing.

115
00:08:39,760 --> 00:08:40,840
‫Ik zie je binnen.

116
00:08:40,840 --> 00:08:43,330
‫De volgende zal meer leuke dingen doen met pointers.

