Gibt es eine empfohlene Strategie für den Umgang mit externen Bibliotheken, die manuell verwaltete Rohzeiger erwarten? Zum Beispiel eine Methode, die einen Vektor von Zeigern erfordert:
ALibraryFunc(std::vector p);
Normalerweise würden Sie Ihren Vektor etwa so erstellen:
std::vector myVec;
for(...)
{
myVec.push_back(new ALibraryData(args));
}
//und dann
ret = ALibraryFunc(myVec);
//und dann
for(auto &a:myVec)
{
delete a;
}
myVec.clear();
Ich würde viel lieber intelligente Zeiger verwenden, aber die Bibliothek akzeptiert sie nicht. Das lässt mich fragen, ob so etwas eher stinkig ist als es manuell zu tun:
std::vector> myVecUP;
std::vector myVec;
for(...)
{
myVecUP.push_back(std::make_unique(args));
myVec.push_back(myVecUP.back().get());
}
//und dann
ret = ALibraryFunc(myVec);
myVec.clear();
myVecUP.clear();
Die zweite Version scheint sicherer im Falle von Ausnahmen oder Fehlern zu sein, aber sie birgt das Risiko von hängenden Zeigern. Übersehe ich hier etwas Offensichtliches? Was würden Sie tun?