【发布时间】:2017-03-23 11:39:06
【问题描述】:
让我解释一下。在这种方法中,我试图将新项目推送到列表中。
spContainer ObjectsManager::createContainer(QStringList data, QVector2D onMapPosition) {
spContainer new_container (new Container());
new_container->setData(data);
new_container->setPosistion(onMapPosition);
containers.push_back(new_container);
emit containerAdd(new_container->toQVariantMap());
return new_container;
}
spContainer 是一个类型定义:
typedef std::shared_ptr<Container> spContainer;
containers 是一个 std::list
class ObjectsManager : public QObject {
...
public:
spContainer createContainer(QStringList data, QVector2D onMapPosition);
...
private:
std::list<spContainer> containers;
};
使用QList 或QVector 时出现同样的错误。
这很奇怪,因为如果我将添加到方法 new QList 并尝试将指针推送到容器中......
spContainer ObjectsManager::createContainer(QStringList data, QVector2D onMapPosition) {
spContainer new_container (new Container());
new_container->setData(data);
new_container->setPosistion(onMapPosition);
QList<spContainer> conts;
conts.push_back(new_container);
//containers.push_back(new_container);
emit containerAdd(new_container->toQVariantMap());
return new_container;
}
它会正常工作的!
什么?有什么区别?!有人可以解释一下发生了什么吗?
【问题讨论】:
-
您的测试并没有真正证明 QList (conts) 有效并且 std::list (containers) 无效。因为它们的作用域不同。
-
@basslo 感谢您的反馈。你说的对!方法无法使用 std::list,因为它在未初始化对象的范围内
标签: qt scope stl shared-ptr