In Code, der eine Ressource, die einmal und nur einmal freigegeben werden sollte, wickeln, ist es idiomatisch, etwas wie die folgenden zu tun, um dies zu garantieren? Gibt es einen besseren Ansatz?Idiomatische Move Contructor für Ressource, die nur einmal in Destruktor freigegeben werden kann
class SocketWrapper {
SocketWrapper() {
fd = socket(AF_INET, SOCK_STREAM, 0);
}
~SocketWrapper() {
if(fd < 0){
close(fd);
}
}
SocketWrapper(SocketWrapper &&other){
fd = other.fd;
other.fd = -1;
}
//similar move assignment
private:
int fd{-1};
};
Sie sollten wahrscheinlich -1 verwenden, weil 0 eine gültige FD ist. – ysdx
Danke, ich werde das bearbeiten. – cloakedlearning
Ja, es ist idiomatisch. Nein, ich kenne keinen besseren Ansatz. Hinweis: Ich stimme @ysdx zu, außer dass ich den ungültigen Wert für die Zielplattform angeben würde ("INVALID_SOCKET", "-1" usw.). –