切片是否与unique_ptr一起发生?

时间:2014-10-07 07:00:44

标签: c++ pointers memory unique-ptr object-slicing

我有一个切片的指针,但我不知道在哪里和为什么。 我认为有两行代码可以导致拼接:

创建唯一指针:

map.insert(make_pair("ChildA", unique_ptr<Base>(new ChildA())));

并从我的唯一指针返回原始指针:

return map["ChildA"].get();

请注意:

  • Class ChildA继承Base
  • Base有一个虚拟析构函数
  • 上例中的地图属于:

    map<string, unique_ptr<Base> >
    

在上述任何一行代码中都会出现拼接吗?是否有一种简单的方法可以避免它的作用?

1 个答案:

答案 0 :(得分:0)

据我所见,您发布的代码中没有任何切片。

演示:http://ideone.com/8InZ6H

如果您尝试将Child1复制为Base值,则会发生切片。您确定在代码中的其他任何地方都没有这样做吗?