将shared_ptr添加到列表时出现分段错误

时间:2017-03-23 11:39:07

标签: qt scope stl shared-ptr

让我解释一下。在这种方法中,我正在尝试将新项目推送到列表中。

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:

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;
};

使用QListQVector时出现同样的错误。 这很奇怪,因为如果我要添加方法新的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;
}

它会正常工作!

WAT?有什么区别?!有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:0)

我的坏! 问题是我称之为未初始化对象的方法!

修复是:

_objManager = spObjectsManager (new ObjectsManager);
_objManager->createContainer(data);
相关问题