我有以下问题:我有一个独特指针的地图。唯一指针类型是基类。现在我想复制一下这张地图。我试过这样的事情:
#include <map>
#include <memory>
class A
{
virtual void myFunc()=0;
};
class B : public A
{
float b;
public:
virtual void myFunc() override
{
b=1.0;
}
};
int main()
{
std::map<int,std::unique_ptr<A>> myMap;
std::map<int,std::unique_ptr<A>> myMapCopy;
myMap.emplace(1,std::make_unique<B>());
for(auto& itMyMap : myMap)
{
myMapCopy.emplace(itMyMap.first,std::make_unique<A>(*itMyMap.second));
}
}
问题是,我必须在调用make_unique时指定类型,但我不知道它是B还是任何其他派生类。是否有一些很好的技巧来制作没有特化的唯一指针的深层副本?