【发布时间】:2020-05-02 22:40:41
【问题描述】:
我有一个关于智能指针的问题。 是否可以将智能指针临时转换为原始指针? 例如:
std::vector<std::unique_ptr<monster>> all_monsters 到 std::vector <monster*> all_monsters;?
我一直在互联网上到处寻找,但找不到方法
我有一个std::vector <monster*> all_monsters 和另一个名为std::vector <monster*> monsters 的向量,其中包含应该深度复制到 all_monsters 中的对象。
所以我使用这个for循环来这样做
for (unsigned i=0; i < monsters.size(); i++)
{ all_monsters.push_back(new monster(monsters[i]->getMonster(),monsters[i]->getCost(),monsters[i]->getType()));
}
但是我不想手动删除对象,所以我想使用唯一指针。
这就是为什么我将矢量更改为
std::vector<std::unique_ptr<monster>> all_monsters;
和我的 for 循环到
for(unsigned i = 0; i < monsters.size(); i++)
{
all_monsters.push_back(std::make_unique<monster>(all_monsters[i]->getName(),all_monsters[i]->getManaCost(),all_monsters[i]->getType()));
}
但我有一个函数只将std::vector <monster*> 作为输入(无法更改),这就是为什么我想暂时将共享指针转换为原始指针的原因。
我是不是想得太复杂了?
【问题讨论】:
标签: c++ pointers vector unique-ptr