FBIagent
Erfahrenes Mitglied
Hallo,
ich probiere gerade für eine kleine C-Bibliothek einen C++-Wrapper zu schreiben.
Nun erstelle ich für alle neuen Resourcen einen std::shared_ptr:
Code cpp:
Die Klasse Window hat jetzt beispielsweise eine methode:
Code cpp:
Mein Problem liegt darin, dass ich auch das Surface kapsele, da das Fenster allerdings immer nur sein "default" Surface hat(das Surface des Fensters kann man nicht ändern), möchte ich hier nicht einen std::shared_pointer zurück liefern sondern so etwas wie einen std::weak_ptr der das Object nicht besitzt aber Zugriff darauf erlaubt(nennen wir es mal std::default_ptr).
Das Surface eines Fensters ist sozusagen ein single pointer der nur vom Fenster selbst "zerstört" wird, wenn das fenster schließt.
Gedacht hatte ich an so etwas:
Aber ich bin mir nicht so sicher ob das der richtige Anssatz dafür ist.
Hat jemand schon einmal Erfahrung mit so etwas gemacht?
ich probiere gerade für eine kleine C-Bibliothek einen C++-Wrapper zu schreiben.
Nun erstelle ich für alle neuen Resourcen einen std::shared_ptr:
Code cpp:
1 | void* API_CreateAWindow(...) -> std::shared_ptr<Window> Window::Create(...) |
Die Klasse Window hat jetzt beispielsweise eine methode:
Code cpp:
1 | void* API_WindowGetSurface(void* window) -> ? Window::GetSurface() |
Mein Problem liegt darin, dass ich auch das Surface kapsele, da das Fenster allerdings immer nur sein "default" Surface hat(das Surface des Fensters kann man nicht ändern), möchte ich hier nicht einen std::shared_pointer zurück liefern sondern so etwas wie einen std::weak_ptr der das Object nicht besitzt aber Zugriff darauf erlaubt(nennen wir es mal std::default_ptr).
Das Surface eines Fensters ist sozusagen ein single pointer der nur vom Fenster selbst "zerstört" wird, wenn das fenster schließt.
Gedacht hatte ich an so etwas:
C++:
class Window
{
...
void* mHandle;
default_ptr<Surface> mSurface;
default_ptr<Surface> GetSurface()
{
if (mSurface.empty())
{
void* handle = API_WindowGetSurface(mHandle);
mSurface = handle;
}
return mSurface;
}
};
Aber ich bin mir nicht so sicher ob das der richtige Anssatz dafür ist.
Hat jemand schon einmal Erfahrung mit so etwas gemacht?
Zuletzt bearbeitet: