我想在新项目中使用 C++11 智能指针,遇到了问题。许多当前的项目仍然在其接口中使用原始指针作为参数,并且没有智能指针的接口,例如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 中的某些方法这样做会导致内存泄漏或其他问题吗?
我检查了最新的C++ 标准 CD,但没有发现任何内容。似乎这是一个未定义的行为。
如果这样做是未定义的行为并且很危险,是否有一种安全的方法可以将智能指针与原始指针的接口一起使用?