Ich habe eine Bibliothek geschrieben, die Verweise auf mehrere verwandte Objekttypen verfügbar macht. Alle diese Objekte haben ihre Lebensdauern intern von der Bibliothek verwaltet. Ein Benutzer der Bibliothek könnte aufgrund der Art der Bibliothek auch die Lebensdauern eines der belichteten Objekte kennen. So könnten sie Zeiger speichern oder Verweise auf diese Objekte behalten. Es wäre vernünftig für sie, dies zu tun und zu wissen, wann diese Objekte nicht mehr gültig sind.Ist es ratsam, den Zugriff auf weak_ptr in einer Bibliotheksschnittstelle zu ermöglichen?
Aber ich fühle mich schuldig, meine Benutzer zu zwingen, vernünftig zu sein.
Ist es akzeptabel, dass eine Bibliothek weak_ptr
's zu ihren Objekten aussetzt? Haben andere Bibliotheken dies getan?
Ich habe die Verwendung dieser Bibliothek in Apps profiliert und festgestellt, dass sie zu missionskritisch ist, um ausschließlich weak_ptr
offenzulegen.
wäre es klüger, passend zu haben API-Funktionen belichten entweder eine Referenz oder ein weak_ptr oder jedes Objekt fähig zu machen, einen weak_ptr
sich auszusetzen?
Sie fragen uns, ob Sie weak_ptrs aufdecken sollten, aber dann sagen Sie, dass Profiling zeigt, dass Sie weapon_ptrs nicht überall verwenden können - richtig? Was würden Sie stattdessen für diese leistungskritischen Fälle bereitstellen? Eine rohe Referenz? Oder ein shared_ptr? –
@j_random_hacker: Die Bibliothek enthält bereits Referenzen. Ich überlege, passende API-Funktionen zu finden, die entweder eine Referenz oder ein weak_ptr verfügbar machen. –
Hmm. Ich schlage vor, dass Sie sweat_ptrs anstelle von shared_ptrs vorschlagen, weil Sie versuchen, den aufrufenden Code zu bekommen, um Fehler zu erkennen, richtig? Aber ich denke, dass der aufrufende Code das schwache_ptr sowieso in ein shared_ptr umwandeln muss, damit man nicht viel Schutz bei ihnen kauft - ganz womöglich wird der ... –