std::vector<std::unique_ptr<Projectile>> const& projectiles = m_projectileManager->GetProjectiles();
std::vector<std::vector<std::unique_ptr<Enemy>>> const& enemies = m_enemyManager->GetEnemies();
std::vector<std::unique_ptr<EntityBoundingBox>> boundingBoxes;
for (std::unique_ptr<Projectile>const& projectile : projectiles) {
std::shared_ptr<Entity> entity = std::move(projectile); //error
std::unique_ptr<EntityBoundingBox> boundingBox = std::make_unique<EntityBoundingBox>(projectile->GetBoundingBox(), entity);
boundingBoxes.push_back(std::move(boundingBox));
}
我正在尝试创建一个新对象,EntityBoundingBox
但我需要保留对原始Entity
的引用,以确定哪些内容与哪些内容发生冲突,但由于我对实体使用 unique_ptr,我似乎无法将它们传递给新类。我也在尝试存储类型 Entity
它是Projectile
的基类
有没有办法在不从unique_ptr更改为shared_ptr的情况下执行此操作,以存储Projectile
和Enemy
对象并删除 const 限定符?
EntityBoundingBox
的构造函数
EntityBoundingBox(std::shared_ptr<BoundingBox> boundingBox, std::shared_ptr<Entity> entity)
不,原因如下:如果你只有一个unique_ptr<>const&
,你无权延长被引用对象的寿命。当您引用的基础unique_ptr
消失时,对象也会消失。但是如果你有一个shared_ptr<>
,你确实有权延长被引用对象的寿命。因此,只用你所拥有的,你不能给予所需要的。
思考一下为什么要将shared_ptr
传递给某些代码段可能会有所帮助。除非该代码可能需要延长引用对象的生存期,否则仅传递引用更有意义。如果您正在传递一个shared_ptr
,那是因为该代码可能会复制该shared_ptr
并期望它延长对象的寿命。如果其他东西无论如何都会破坏物体,那是不可能的。