我希望在新项目中使用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中的其他方法是否对scrollArea
存储的指针执行操作符delete
。
如果Qt中的一些方法这样做,会导致内存泄漏或其他问题吗?
我查阅了最新的C++标准CD ,但没有找到相关内容。似乎这是未定义行为。
如果这样做是未定义行为和危险的,那么是否有一种安全的方式来使用智能指针与原始指针的接口?
delete
,那么如何确保当前没有内存泄漏? - hmjddelete
对象,如果你不确定Qt是否会替你做这件事? - hmjdstd::shared_ptr
来避免显式使用delete
。get()
不会释放所有权,也没有其他的std::shared_ptr
共享QScrollArea
对象。因此,当scrollArea
析构时,内存将被回收。我不知道为什么要关心是否显式地从win.setCentralWidget(scrollArea.get());
中删除对象。 - UniversE