-1

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

唯一指针的创建:

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

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

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

注意:

  • ChildA 类继承 Base
  • Base 有一个虚拟析构函数
  • 上例中的地图类型为:

    map<string, unique_ptr<Base> >
    

拼接是否发生在上述任一代码行中?有没有一种简单的方法可以避免它在哪里?

4

1 回答 1

0

据我所知,您发布的代码中没有发生切片。

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

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

于 2014-10-07T07:09:19.897 回答