Я пишу приложение на основе Qt с функциональностью, подобной Blender.
Он состоит из «фреймворка», который представляет собой систему плагинов GUI + и плагины.Плагины - это библиотеки Qt с объектами (например, Сферой, Ящиком и т. Д.), Которые могут быть в основном созданы и отображены.Все эти объекты, после их создания, хранятся в каркасе в некоторой структуре контейнера, которая хранит для них shared_ptr (так что на самом деле контейнер очень похож на vector<shared_ptr<INode>>
)
То, что я хочу, этоиспользовать функцию shared_from_this () внутри одного из плагинов.Например, вот пример плагина (код изменен для ясности):
class Q_DECL_IMPORT SphereNode: public INode, public Sphere
Где INode
- это:
class INode: public QObject, public boost::enable_shared_from_this<INode>
, базовый класс для всего, что хранится в контейнере.Поэтому проблема в том, что эта функция:
void SphereNode::update()
{
foo(shared_from_this());
}
создает исключение boost::bad_weak_ptr
.
Несколько замечаний о том, как создается этот SphereNode (класс Factory)
boost::shared_ptr<INode> NodeFactory::createNode(const QString& type, QString tag)
{
...
QPluginLoader loader(filesPlugin_[i]);
boost::shared_ptr<QObject> plugin(loader.instance());
boost::shared_ptr<INode> iNodePlugin = boost::shared_dynamic_cast<INode>(plugin);
return iNodePlugin;
}
Есть идеи?