RAII(C++)
Siehe aus Wikipedia. Der Destruktor wird durch Zerstören der automatischen Variablen aufgerufen, und die Ressource wird zu diesem Zeitpunkt geschlossen. Es wird davon ausgegangen, dass die close-API keine Ausnahme auslöst. Wie das Schutzmodul von Perl.
void functionA()
{
    LogFile log("Output log of functionA");
 
    log.write("fun Step succeeded");
 
    // ...Verwenden Sie weiterhin log...
    //Unabhängig davon, ob eine Ausnahme ausgelöst wird oder eine Funktion zurückgegeben wird, ist das Handle der Protokolldatei garantiert geschlossen.
}
Es gab es in der Vergangenheit nicht, aber es hat zugenommen.
with open("hello.txt") as f:
    for line in f:
        print line
Erhält einen Abschluss und weist Ressourcen vor und nach Ausführung der Funktion zu und zerstört sie.
open("foo.csv") {|file|
  while l = file.gets
    lines += 1
    fields += l.split(',').size
  end
}
Ich möchte c # mit sehen.
//Wenn Sie die Dispose-Methode implementieren, können Sie sie nach dem Beenden von verwenden
using (StreamWriter writer = 
                new StreamWriter("memo.txt", false, Encoding.UTF8))
{
    writer.Write("Text");
}
scope(D-lang)
Die Funktion nach dem Gültigkeitsbereich wird beim Escape ausgewertet.
void abc()
{
    Mutex m = new Mutex;
    lock(m);	//Mutex sperren
    scope(exit) unlock(m);	//Am Ende des Bereichs entsperren
    foo();	//Mach die Verarbeitung
}
defer(go-lang)
Ähnlich wie Umfang
    f, err := os.Open(filename)
    if err != nil {
        return "", err
    }
    defer f.Close()  // f.Schließen wird nach Abschluss ausgeführt
Es schließt diejenige, die AutoCloseable Interface implementiert. (Danke an tsuyoshi_cho)
    public static void main(String[] args) {
        try (AutoCloseable imp = new AutoCloseableImpl()) { // New!
            System.out.println("hoge");
        } catch(Exception e) {
            System.out.println("catch:" + e);
        } finally {
            System.out.println("finally");
        }
    }
synchronized(Java) Sie können die Erfassung von Sperren für Objekte mit Syntax verwalten.
class MyObject {
  int val;
  MyObject(int val) {
    this.val = val;
  }
  synchronized void setVal(int val) {
    this.val = val;
  }
  synchronized int getVal() {
    return val;
  }
}
Vorerst werde ich es hinzufügen, wenn ich mich an etwas erinnere.
Recommended Posts