Я хочу использовать С++ 11 Smart Pointers в новых проектах и сталкиваться с проблемой. Многие текущие проекты по-прежнему используют исходные указатели в качестве параметров в своем интерфейсе и не имеют интерфейса для интеллектуальных указателей, например. QMainWindow:: setCentralWidget.
Чтобы сохранить тип согласованным, я должен передать сохраненный указатель из get()
, как этот сегмент:
QMainWindow win;
std::shared_ptr<QWidget> scrollArea{ std::make_shared<QScrollArea>() };
// QScrollArea is a derived class of QWidget.
win.setCentralWidget(scrollArea.get());
Но я не могу убедиться, что другие методы в Qt выполняют оператор delete
на сохраненном указателе scrollArea
.
Может ли это вызвать утечку памяти или другие проблемы, если некоторые методы в Qt делают это?
Я проверил последний С++ Standard CD и ничего не нашел. Кажется, это поведение undefined.
Если это поведение undefined и опасно, существует ли безопасный способ использования интеллектуальных указателей (ов) с интерфейсом для необработанных указателей?