2016-04-14 7 views
1

Ich muss in C++ auf einen int (Dateideskriptor) verweisen. Ich habe neue C++ 11 und C++ 14 Dokumente durchgesehen, um zu sehen, ob es eine Vorlage für die Referenzzählung gibt. Gibt es das wirklich nicht als Teil der neuen Dinge, die in den letzten Jahren zu C++ hinzugefügt wurden, oder habe ich es in den Dokumenten vermisst?C++ Vorlage, um native Typen zu referenzieren

Hinweis Ich bin nicht auf der Suche nach Menschen, die ihre eigenen Lösungen als Teil dieser StackOverflow-Frage zur Verfügung stellen! Ich möchte nur wissen, ob es eine "offizielle" Lösung gibt, die ich verwenden sollte.

+1

Suchen Sie nach einer Variante von 'shared_ptr' ohne die Pointer-Ness? – immibis

+0

@immibis Genau, Referenzzählung für Nicht-Zeiger-Typen. In meinem Fall ein Dateideskriptor, der durch 'open (3)' erhalten wurde. –

+2

Sie können 'shared_ptr' mit der Adresse des int und einen benutzerdefinierten Deleter verwenden, wenn Sie den int nicht dynamisch zuweisen möchten. –

Antwort

6

Wenn die Verwendung von shared_ptr konsistent mit Ihrer Absicht ist (zerstören Sie die Datei, wenn der Referenzzähler 0 ist), dann wäre das der richtige Weg. Sie können den ursprünglichen gemeinsamen Zeiger mit einem benutzerdefinierten Destruktor erstellen, bei dem es sich um einen Dateilöscher in Ihrem Anwendungsfall handeln kann. Es hat auch eine use_count-Member-Funktion für den Fall, dass Sie darauf zugreifen möchten.

+0

Die Antwort lautet also "Nein, es gibt keine perfekte Vorlagenlösung in C++ für das, was ich tun möchte." Aber ja, ich habe am Ende 'shared_ptr' verwendet, um das zu implementieren, was ich brauchte. –