【发布时间】:2023-03-19 15:48:02
【问题描述】:
我想在新项目中使用 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++ Standard CD 并没有发现任何内容。似乎这是一种未定义的行为。
如果这样做是一种未定义的行为并且很危险,是否有一种安全的方法可以将智能指针与原始指针接口一起使用?
【问题讨论】:
-
如果你不确定Qt是否执行
delete你如何确保当前没有内存泄漏? -
这和你问“两次删除指针会不会出问题”是一样的
-
@W.B.我的主要目的是为这种情况找到解决方案。
-
@hmjd 当然目前没有内存泄漏。你不知道
std::shared_ptr是做什么的吗? -
@UniversE,是的,我愿意。我的评论是,如果您不知道 Qt 是否为您执行此操作,那么您目前如何知道是否明确
delete对象?
标签: c++ qt c++11 interface smart-pointers