У меня есть класс TreeItem
, в котором есть элемент данных с именем Container
class TreeItem
{
public:
void setContainer(const Container &data);
private:
QList<TreeItem*> childItems;
Container itemData;
TreeItem* parentItem;
};
Определение для setContainer
void TreeItem::setContainer(const Container &cont)
{
itemData = cont;
}
Определение дляКонтейнерный класс
class Container
{
private:
std::string stdstrContainerName;
std::string stdstrPluginType;
Geometry* Geom;
public:
Container();
Container(std::string, std::string, Geometry* geometry );
Container(const Container& obj);
};
Container::Container( std::string strName, std::string strType,
Geometry* geometry) : Geom(geometry)
{
stdstrContainerName = strName;
stdstrPluginType = strType;
qDebug() << geometry->isValid();
}
Я использую свой класс TreeModel
для установки значения контейнера в объекте TreeItem
void TreeModel::SetContainer(const QModelIndex &index, Container* Cont)
{
TreeItem *item = getItem(index);
item->setContainer(*Cont);
}
Geometry
, который является типом данных для Container
класса, имеет виртуальную функцию с именем draw
Class Geometry
{
public:
std::string stdstrType;
bool bValid;
public:
// Other Functions
virtual void draw();
};
Существуют и другие классы, производные отGeometry
класс
class Sph : public Geometry
{
public:
Sph( float radius , float segments );
~Sph();
void init();
void CleanUp();
void draw();
private:
float fRadius, fSegments;
bool isInited;
unsigned int m_VAO, m_VBO;
int iNumsToDraw;
SumShader shader;
bool isChanged;
};
Это процесс, который я использую для установки Контейнера на TreeItem
класс.
void WavefrontRenderer::AddSphere()
{
QModelIndex index = treeView->selectionModel()->currentIndex();
QAbstractItemModel *model = treeView->model();
TreeModel *myModel = qobject_cast<TreeModel*>(model);
Sph* sphere = new Sph( 0.1 , 32);
sphere->setValidState(true);
sphere->stdstrType = "Sphere";
if (!model->insertRow(index.row() + 1, index.parent()))
return;
Container cont("Sphere" , "SPHERE" , sphere );
QModelIndex child = model->index(index.row() + 1, 0, index.parent());
model->setData(child, QVariant("Container"), Qt::EditRole);
myModel->SetContainer(child, &cont);
delete sphere // This line gives error
}
Всеработает как положено, но у меня есть несколько вопросов.
1) Поскольку я создаю новый объект Sph* sphere = new Sph( 0.1 , 32);
, но не удаляю его, это вызывает утечку памяти?
2) Когда я пытался удалитьпосле установки TreeItem
Ошибка памяти