【发布时间】:2014-09-07 19:27:46
【问题描述】:
如何将不同的派生对象添加到 unique_ptr 的向量中。 使用指针向量,我将创建项目,然后创建指向对象的基指针并传递要添加的指针,但 make_unique 不接受指针,我不想为每种类型的派生对象创建重载函数。
class Base{...};
class Item:public Base{...};
Add_Item(Base* thing)
{
vec.push_back(thing);
}
//Problem with this is i have multiple derived objs and would rather have 1 Add_Item instead of multiple Add_Item functions.(if possible)
Add_Item(Item thing)
{ //this runs,but i lose anything that was in Item class
vec.push_back(make_unique<Base>(thing));
}
/----------------------------------
跟进问题,你能不能在另一个向量中有一个 unique_ptr 的向量。 我已经尝试过了(你们向我展示了两种方式,使用模板 Add_Item 函数和项目 Add_Item 函数)。但都产生了错误。
class Item: public Item
{ vector<unique_ptr<Base>>inv }
Item bag;
Item n_bag;
bag.Add_Item<I>(n_bag);
跟进跟进,不,你不能,任何关于使用什么样的智能指针的建议
【问题讨论】:
-
谢谢大家的帮助,我有一个后续问题,是否可以在 unique_ptr 的另一个向量中包含一个 unique_ptr 的向量?
-
对此问题和答案的重要说明。 将基类析构函数设为虚拟很重要。 如果您忘记了,正常编译不会警告您。但这会导致内存泄漏。
标签: c++ pointers vector unique-ptr