RAII(C++)
Voir de wikipedia. Le destructeur est appelé en détruisant la variable automatique et la ressource est fermée à ce moment-là. On suppose que l'API close ne lève pas d'exception. Comme le module de garde de perl.
void functionA()
{
LogFile log("Output log of functionA");
log.write("fun Step succeeded");
// ...Continuer à utiliser le journal...
//Qu'une exception soit levée ou qu'une fonction soit renvoyée, le handle du fichier journal est garanti d'être fermé.
}
Cela n'existait pas dans le passé, mais il a augmenté.
with open("hello.txt") as f:
for line in f:
print line
Reçoit une fermeture et alloue et détruit des ressources avant et après l'exécution de la fonction.
open("foo.csv") {|file|
while l = file.gets
lines += 1
fields += l.split(',').size
end
}
Je veux voir c # avec.
//Si vous implémentez la méthode Dispose, vous pouvez l'utiliser après avoir quitté en utilisant
using (StreamWriter writer =
new StreamWriter("memo.txt", false, Encoding.UTF8))
{
writer.Write("texte");
}
scope(D-lang)
La fonction après la portée est évaluée lors de l'échappement.
void abc()
{
Mutex m = new Mutex;
lock(m); //Verrouiller le mutex
scope(exit) unlock(m); //Déverrouiller à la fin de la portée
foo(); //Faites le traitement
}
defer(go-lang)
Similaire à la portée
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close() // f.La fermeture est exécutée à la fin
Il ferme celui qui implémente l'interface AutoCloseable. (Merci à 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) Vous pouvez gérer l'acquisition de verrous sur des objets avec la syntaxe.
class MyObject {
int val;
MyObject(int val) {
this.val = val;
}
synchronized void setVal(int val) {
this.val = val;
}
synchronized int getVal() {
return val;
}
}
Pour le moment, je l'ajouterai si je me souviens de quelque chose.
Recommended Posts