Сбои программы, помещающие указатели в вектор

Этот вопрос задавался ранее, но я ничего не понял в ответах, даже после некоторого исследования. Моя программа падает, когда я отправляю указатель объекта на вектор. Этот код вызывает его, особенно когда я добавляю снаряд к вектору.

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,

определяется явно, тогда, вероятно, потребуются все три из них.

Другие вопросы по тегам