Используйте std::vector
и std:shared_ptr
как в:
std::vector<std::shared_ptr<QLine> > LinesData::getList(){
std::vector<std::shared_ptr<QLine> > lineList2;
for(int i = 0; i < 50; ++i){
lineList2.push_back(new QLine(10, 10*i, 100, 100));
}
return lineList2;}
и
void runtimeWindow::drawAllLines(){
std::vector<std::shared_ptr<QLine> > lines = linesData.getList();
for(auto i = lines.begin(); i != lines.end(); ++i){
qDebug() << (*i)->x1();
}
}
Если у вас нет std::shared_ptr
в компиляторе, используйте версию Boost.
Использование контейнера std::vector
позволяет избежать проблем, связанных со стилем C (например, переполнение буфера), а std::shared_ptr
выполняет своего рода сборку мусора, когда вы закончите с содержимым вектора, чтобы помочь предотвратить утечки памяти.
Вы также можете сделать это без указателей, выполнив следующие действия:
std::vector<QLine> LinesData::getList(){
std::vector<QLine> lineList2(50);
for(int i = 0; i < 50; ++i){
lineList2[i].setLine(10, 10*i, 100, 100);
}
return lineList2;}
и затем нарисуйте их, используя
void runtimeWindow::drawAllLines(){
std::vector<QLine> lines = linesData.getList();
for(auto i = lines.begin(); i != lines.end(); ++i){
qDebug() << i->x1();
}
}