Pointere eller værdityper

Tags:    c++

Jeg har arbejdet med Object Pascal og C# i omkring 2 år, men nu er jeg skiftet til C++.

Jeg har et problem med en pointer (tror jeg). Se dette stykke kode (kræver wxWidgets-frameworket):

Fold kodeboks ind/udKode 


Hvorfor kan dette ikke kompileres?

Fold kodeboks ind/udKode 


I C# er alle klasser referencetyper, mens structs m.m. er værdityper. Hvordan fungerer dette i C++?



Indlæg senest redigeret d. 08.06.2007 14:47 af Bruger #6653
Når du new-allokere får du en pointer, du skal derfor gøre følgende i stedet.

bool myApp :: OnInit()
{
wxSize * size = new wxSize ( 300, 300 );
[...]
}

Ellers skal du undgå at bruge en new-allokering og gøre sådan i stedet.

bool myApp :: OnInit()
{
wxSize size ( 300, 300 );
[...]
}

Hth



Indlæg senest redigeret d. 08.06.2007 15:37 af Bruger #10448
Såvidt jeg ved, bliver alle variabler i C++ oprettet på stakken, medmindre de bliver skabt med new operatoren, så bliver de skabt på heapen. new operatoren returnere en pointer til stedet på heapen, hvor objektet er oprettet. Det betyder, at hvis du i C++ skal oprette noget på heapen, skal du gøre sådan her:
Fold kodeboks ind/udKode 

Det vil oprette en wxSize på heapen, og gemme adressen på denne i size. Size er altså en pointer til en wxSize. Det er indikeret af stjernen.

Du kan også oprette et objekt på stakken. Det gøres, såvidt jeg ved, sådan her:
Fold kodeboks ind/udKode 

En ting ved et objekt på stakken, er at denne automatisk bliver slettet når den går ud af scope, altså funktionen returnere. Dette er ikke tilfældet ved objekter på heapen. De forbliver der, indtil de bliver nedlagt med delete operatoren.




En ting ved et objekt på stakken, er at denne automatisk bliver slettet når den går ud af scope, altså funktionen returnere. Dette er ikke tilfældet ved objekter på heapen. De forbliver der, indtil de bliver nedlagt med delete operatoren.


Til gengæld skal man være varsom med at gemme alt for store mængder data på stakken.




Såvidt jeg ved, bliver alle variabler i C++ oprettet på stakken, medmindre de bliver skabt med new operatoren, så bliver de skabt på heapen.


Hvad er specielt ved stakken og heapen, og hvad er bedst i hvilke situationer?



Stakken er "lokal" for funktionen. Ting som bliver lagt på stakken, bliver også skubbet af den, når ens funktion returnere. Heapen er "global", og ting som du allokere der, forbliver der indtil de bliver nedlagt igen.

Heapen er den man skal vælge at bruge, hvis man vil allokere store datamængder, eller hvis man skal dele f.eks. et objekt mellem flere dele af ens program. Et eksempel på dette kunne være:
Fold kodeboks ind/udKode 

NOTE: Dette skal vise princip, og ikke andet. Derfor er "EnKlasse" ikke vist.







Allokering på stakken er også væsenligt hurtigere end allokering på heapen.



t