【发布时间】:2019-12-20 05:53:41
【问题描述】:
所以我有以下用 Qt C++ 编写的代码:
// Post* derives from QObject
Post* post = new Post(this);
QString url;
ParseResult result = parse(url, post); // this function takes a Post* and modifies it
// if result is succesfully parsed
if(result == ParseResult::Success){
// add the post to a std::vector<Post*> which is a member of the class
}
else{
post->deleteLater();
}
现在你可以看到我正在删除原始指针Post*,但是我想知道我上面的内容是否可以以不需要使用deleteLater()的另一种方式实现。
【问题讨论】:
-
智能指针算作答案吗?
-
@nada 不支持 Qt。您可以获得双重删除(一次由智能指针,一次由 QObject 的父级。)
-
那么我的答案是:修复 Qt 以兼容智能指针,然后使用智能指针。
-
@AlanBirtles 这被认为是过度设计,至少由这个答案的作者 - Why don't the official Qt examples and tutorials use smart pointers?
-
@JonnyHenly 您链接到的答案没有抓住重点。智能指针不仅仅与泄漏有关。它们还涉及异常安全和减少出错的可能性。以“Qt 方式”进行操作需要您正确操作。但我们是人类,所以我们会犯错误。如果你犯了一个错误,你可能会泄漏(例如,你分配了一个没有父对象的对象,但是在分配和你为其分配父对象的点之间发生了一些事情,你退出了范围。)使用智能指针,这样的错误更多困难,因此错误的空间较小。