Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Object HowTo

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.12.2006, 23:50 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Ich hab nur mal eine kleine Frage, weil ich irgendwie keinen Unterschied kenne, wie Objekte erzeugt werden. Da gibt es ja so wie ich das sehe 3 Möglichkeiten. Aber welche wird wann benutzt ?


C++:
Foo foo(bar);
Foo* foo(bar);
Foo* foo = new Foo(bar);


Und eine Kleinigkeit noch, zum generellen Verständniss. Es ist ja unschön einen Zeiger der in einer Funktion deklariert wurde zurückzugeben. Aber wann generell sollte man dann Zeiger wie int* und wann nur die Speicheradresse wie int& zurückgeben?

Danke schonmal, bei solchen Fragen weiß man einfach nicht, wie man danach googlen soll
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.12.2006, 10:40 Uhr
BoBtheREapER
kein job für nen BoB


zwischen dem 1. und dem 2. is ja klar: 2. ist nen pointer und 1. keiner. nen unterschied gibts zwischen 2. und 3. glaub ich nicht aber 3. bräuchte man ja zum beispiel bei

C++:
Foo* foo = new Foo(bar);
...
foo = new Foo(bar);



zeiger nehme ich eigentlich nur wenn ich sie für eine C-api brauche. sonst versuche ich das mit &.
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.12.2006, 15:58 Uhr
ao

(Operator)


Also, das erste und das dritte erzeugen ein Objekt vom Typ Foo. bar ist dabei irgendwas, was hilft, den Foo zu konstruieren.

Im ersten Fall ist foo ein "automatisches" Objekt, das so lange lebt, bis das Programm den Scope, in dem das Objekt erzeugt wurde, verlässt (Scope ist der Bereich zwischen { und }). Beim Verlassen des Scope wird foo automatisch zerstört. Automatische Objekte liegen in der Regel auf dem Stack; das muss nicht so sein, ist aber meist die günstigste Lösung.

Im dritten Fall befindet sich das Objekt auf dem Heap (globale Speicherreserve) und wird über den Pointer foo festgehalten. Es lebt, bis es durch

C++:
delete foo;


zerstört wird. Vergisst man das, hat man ein Speicherleck.

Im zweiten Fall wird keine Foo-Instanz erzeugt. foo ist lediglich ein Pointer auf Foo, der mit dem Wert bar initialisiert wird; bar muss also ebenfalls vom Typ Foo* sein.

Klarer?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.12.2006, 17:11 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Ok, auf jeden Fall etwas klarer. Für Membervariablen macht man das dann wie folgt in einer Klasse, oder?

C++:
class Bar
{
private:
    Foo* foo;
public:
    Bar()
    {
         foo = new Foo("bar");
    }
    ~Bar()
    {
        delete foo;
    }
};

Ansonsten sollte man also nur "automatische" Objekte nutzen, oder?
Nur hab ich den Sinn von Foo* nicht ganz verstanden. Wann nutzt man zeiger auf Objekte?
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: