Ich möchte C++ 11 Smart Pointer in neuen Projekten verwenden und auf ein Problem stoßen. Viele aktuelle Projekte verwenden immer noch rohe Zeiger als Parameter in ihrer Schnittstelle und haben keine Schnittstelle für intelligente Zeiger, z. QMainWindow::setCentralWidget.Gibt es eine sichere Möglichkeit, C++ 11 Smart Pointer und die Schnittstelle für Raw Pointer zusammen zu verwenden?
Um Typen konsistent zu halten, ich habe die gespeicherten Zeiger von get()
wie dieses Segment zu übergeben:
QMainWindow win;
std::shared_ptr<QWidget> scrollArea{ std::make_shared<QScrollArea>() };
// QScrollArea is a derived class of QWidget.
win.setCentralWidget(scrollArea.get());
Aber ich sicher, ob andere Methoden in Qt ausführen Operator delete
auf dem gespeicherten Zeiger von scrollArea
machen kann .
Wird es Speicherverlust oder andere Probleme verursachen, wenn einige Methoden in Qt das tun?
Ich habe die neuesten C++ Standard CD überprüft und nichts dazu gefunden. Scheint, es ist ein undefiniertes Verhalten.
Wenn dies ein undefiniertes Verhalten und gefährlich ist, gibt es eine sichere Möglichkeit, intelligente Zeiger mit der Schnittstelle für rohe Zeiger (s) zu verwenden?
Wenn Sie sich nicht sicher sind, ob Qt "delete" ausführt, wie stellen Sie sicher, dass derzeit keine Speicherlecks vorhanden sind? – hmjd
Es ist das gleiche, als wenn Sie gefragt würden "Wird ein Zeiger zweimal gelöscht, um einige Probleme zu verursachen?" –
@ W.B. Mein Hauptzweck ist es, eine Lösung für diesen Fall zu finden. – UniversE