Сбои программы, помещающие указатели в вектор
Этот вопрос задавался ранее, но я ничего не понял в ответах, даже после некоторого исследования. Моя программа падает, когда я отправляю указатель объекта на вектор. Этот код вызывает его, особенно когда я добавляю снаряд к вектору.
void WorldManager::spawnProjectile (int x,int y,int speedx,int speedy){
//LaserBulletProjectile proj(x,y,speedx,speedy);
Projectile *proj;
proj = new LaserBulletProjectile(x,y,speedx,speedy);
projectiles->push_back(proj);
}
и вектор
std::vector<Projectile * > * projectiles;
Я слышал о правиле трех (и пяти?) И не понимаю. Может ли кто-то попытаться объяснить это так, чтобы это было удобно для начинающих? Я мог бы быть более размышляющим:)
Кроме того, после прочтения я думаю, что это из-за того, что указатель не был освобожден. Я еще этого не написал, потому что в моем коде еще не было шанса. (У меня еще ничего не работает, я думал, что смогу сделать это позже. Может, в этом проблема.)
2 ответа
Вам нужно выделить вектор:
projectiles = new std::vector<Projectile*>;
Прежде чем пытаться добавить вещи к нему!
Правило трех гласит:
If your class needs any of
a copy constructor,
an assignment operator,
or a destructor,
определяется явно, тогда, вероятно, потребуются все три из них.