Voglio usare C++ 11 Smart Pointers in nuovi progetti e riscontrare un problema. Molti progetti correnti utilizzano ancora puntatori grezzi come parametri nella loro interfaccia e non hanno un'interfaccia per i puntatori intelligenti, ad es. QMainWindow::setCentralWidget.Esiste un modo sicuro per utilizzare C++ 11 Smart Pointer e l'interfaccia per Raw Pointer insieme?
Per mantenere tipo coerente, devo passare il puntatore memorizzato get()
come questo segmento:
QMainWindow win;
std::shared_ptr<QWidget> scrollArea{ std::make_shared<QScrollArea>() };
// QScrollArea is a derived class of QWidget.
win.setCentralWidget(scrollArea.get());
Ma non posso fare in modo che altri metodi in Qt vengono eseguiti operatore delete
sul puntatore memorizzato di scrollArea
.
Causa perdita di memoria o altri problemi se alcuni metodi in Qt lo fanno?
Ho controllato l'ultimo C++ Standard CD e non ho trovato nulla. Sembra che sia un comportamento indefinito.
Se ciò comporta un comportamento indefinito e pericoloso, esiste un modo sicuro per utilizzare puntatori intelligenti con l'interfaccia per i puntatori raw?
Se non si è certi che Qt esegua "cancella", come si assicura che non vi siano perdite di memoria al momento? – hmjd
È lo stesso come se si chiedesse "l'eliminazione di un puntatore due volte causa alcuni problemi?" –
@ W.B. Il mio scopo principale è trovare una soluzione per questo caso. – UniversE