Frage zu auto_ptr
-
Ich bin ja doof, der löscht das natürlich am Ende der Funktion bei auto_ptr. *feix*
-
Eine auto_ptr Instanz wird ungültig wenn sie ihren Scope verlässt. Es könnte sein, das dein auto_ptr zu lokal ist.
-
ptrus schrieb:
Nabend.
Ich habe hier ein funktionierendes VC6 Projekt das ich in BCB5 übernehmen möchte.
auto_ptr<char> m_apKey; m_apKey = auto_ptr<char>(new char[m_keylength]);
Jetzt bekomme ich leider den Fehler:
E2285 Keine Übereinstimmung für 'auto_ptr<char>::operator =(auto_ptr<char>)' gefunden
Sieht wer den Fehler und kann diesen mir bitte benennen?
VC6 klappts, aber BCB5 will nicht.
Ist zwar schon älter, aber es ist doch bezeichnend, dass irgendwie keiner der verbreiteten Compiler (vc++, bcb, gcc) in der Lage ist, einen korrekten auto_ptr anzubieten.
-
Sollte das überhaupt gehen?
Immerhin wird hier ein Array an einen auto_ptr gebunden der dann ja nicht das korrekte delete bereitstellen sollte.
Der BCB5 ist allerdings schon recht alt. Der BCB2007 compiliert das.
-
Braunstein schrieb:
Sollte das überhaupt gehen?
Immerhin wird hier ein Array an einen auto_ptr gebunden der dann ja nicht das korrekte delete bereitstellen sollte.
Der BCB5 ist allerdings schon recht alt. Der BCB2007 compiliert das.Natürlich ist die Geschichte undefiniert, aber die Fehlermeldung indiziert, dass auch ein
m_apKey = auto_ptr<char>(new char);
fehlschlagen würde.
-
Ich habs mit get() ausprobiert, leider ohne erwarteten Erfolg.
auto_ptr<TIniFile> ini(new TIniFile(Folder)); if (!ini.get()) ShowMessage("Error");
Ich kann einen gültigen Pfad setzen oder irgendwas, er zeigt mir nie die ShowMessage an.
-
Hallo
ja was erwartest du denn auch? Die Abfrage mit dem get() bringt nur die Unterscheidung ob NULL oder nicht NULL. Damit kannst du aber nicht überprüfen ob die Instanz irgendwelche inhaltlichen Fehler liefert.
Da new immer gültige Instanzen und damit Adressen liefert (es sei denn der Speicher kann nicht reserviert werden) schlägt die Abfrage immer fehl, da danach immer eine Adresse ungleich NULL im auto_ptr steht. Das ist auch kein "Fehler" des auto_ptr.
Wie du konkrete Fehler bei TIniFile abfragen kannst must du schon in der BCB-Hilfe nachlesen.bis bald
akari
-
akari schrieb:
Da new immer gültige Instanzen und damit Adressen liefert (es sei denn der Speicher kann nicht reserviert werden)
und dann wird eine Exception geworfen. So oder so ist die Abfrage Unsinn.
-
Kann man nicht auf new(nothrow) verwenden, mit dem Resultat, dass statt einer Exception ein NULL-Zeiger zurückgegeben wird?
-
kann man, aber warum?
Wenn kein Speicher mehr da ist, ist der normale Programmablauf doch sowieso schwer gestört. Wenn das kein Grund für eine Exception ist, was dann?