Beiträge von xruxl

    Hallo, ich hoffe ihr könnt mir weiterhelfen. Ich programmiere normalerweise C#, manchmal auch Java und habe noch nie etwas in C++ gemacht, in C auch nur was für die Uni nötig war (Sysprog, Übersetzerbau), also bitte um Nachsicht.

    Ich beginne gerade ein kleines Programm in C++ und wüsste gerne, ob ich einige Dinge richtig verstanden habe und was da sozusagen Best Practise ist.

    Neues Objekt erzeugen
    Hier wird der Speicher automatisch freigegeben, wenn der Scope verlassen wird?

    Code
    ClassA objA;


    Auf Methoden greift man hier mit . zu?

    Code
    objA.doSomething();

    Hier wird der Speicher nicht automatisch freigegeben, sondern mit delete?

    Code
    ClassA *objA = new ClassA();


    Auf Methoden greift man hier mit -> zu?

    Code
    objA->doSomething();

    Welche der beiden Möglichkeiten verwendet man üblicherweise?

    Und wie sieht das aus, wenn ich in einer Klasse als Eigenschaft ein Objekt einer anderen Klasse habe, also in Java etwa so:

    Code
    class TestA
    {
       private TestB testB;
    
       public TestB getTestB() { return testB; }
    
    
       public void setTestB(TestB val) { testB = val; }
    }


    Wie würde man diese Klasse in C++ schreiben?
    So (vereinfacht: Headerfile und so):

    Code
    class TestA
    {
       private TestB testB;
    
       public TestB getTestB() { return testB; }
    
    
       public void setTestB(TestB val) { testB = val; }
    }


    oder so:

    Code
    class TestA
    {
       private TestB *testB = new TestB();
    
       public TestB* getTestB() { return testB; }
    
    
       public void setTestB(TestB *val) { testB = val; }
    }

    Übergabe von Objekten als Parameter an Funktionen

    Wenn ich das richtig verstanden habe, wird hier eine Kopie des Objekts übergeben?

    Code
    public int doSomething(ClassA objA) { ... }
    ClassA objA;
    doSomething(objA);

    Und hier wird eine Referenz auf das Objekt übergeben?

    Code
    public int doSomething(ClassA *objA) { ... }
    ClassA *objA = new ClassA();
    doSomething(objA);

    Welche von beiden Möglichkeiten verwendet man "im Normalfall"?

    Hallo,

    ich habe beruflich mit einem Webauftritt zu tun, wo recht erfolgreich Mehrfach-Registrierungen verhindert werden. Nun soll ich herausfinden, wie die das anstellen, bin aber nachdem ich alles mir Bekannte ausschließen konnte ziemlich ratlos. Leider habe ich auch nicht unbegrenzt Testlinks zur Verfügung, kann also nicht einfach alle möglichen Kombinationen austesten und der JavaScript-Code ist zum größten Teil absichtlich unlesbar gemacht. Vielleicht hat jemand noch eine Idee?

    Was ich weiß:
    Flash muss installiert und aktiviert sein, da die Registrierung sonst nicht möglich ist, sonstige evtl. interessante Plugins (Java, Silverlight) habe ich deaktiviert.

    Es scheint sich zudem um eine browserspezifische Sache zu handeln, da ich die Registrierung zunächst genau einmal im Firefox 3.5 aufrufen konnte (seitdem ist sie von diesem PC nicht mehr im Firefox aufrufbar). Danach konnte ich sie aber noch ebenfalls genau einmal im Internet Explorer 8 aufrufen.

    Folgendes kann ich bereits ausschließen (da alles gelöscht und trotzdem keine erneute Registrierung möglich):
    - "normale" HTTP-Cookies
    - Flash-Cookies (Shared Objects)
    - DOM Storage
    - IP-Adresse (da mehrfacher Einstieg aus dem selben Netzwerk, aber von unterschiedlichen PCs möglich)

    Eine Möglichkeit wäre auch, dass aus diversen Systemdaten (zB Bildschirmauflösung, installierte Schriftarten) eine Art Fingerabdruck erstellt wird, aber zumindest diese beiden Parameter habe ich versuchsweise verändert - leider erfolglos.

    Ich brauche eine Art "ArrayList", in der ich eine unbestimmte Anzahl von Strings speichern kann. Ich hab mir dazu eine Lösung überlegt, die auch funktioniert, aber ich weiß nicht ob das vom Konzept her so richtig ist.

    Das Konzept (vereinfacht):

    Besonders das Speicherfreigeben ist mir auch noch nicht ganz klar. Die Schleife um den Speicher für die einzelnen Strings freizugeben ist meiner Meinung nach nötig, weil sonst nur die Pointer auf die Strings gelöscht werden, stimmt das? Und gibt realloc() den alten Speicherbereich (wenn verschoben) selbst wieder frei oder muss ich das machen?