【发布时间】:2018-03-02 01:44:28
【问题描述】:
我有一个基类和派生类(BaseObj 和 Derived Obj),我需要一个字符串键映射,该映射具有指向对象的指针:
std::map<std::string, std::shared_ptr<BaseObj>
这里是复杂的:映射值需要在堆上,因为对象将超出范围,但是对象是通过引用传递给函数的:
void insert_in_map(std::string, const& BaseObj);
由于引用是对基类的引用,因此(据我所知)无法将底层值复制到堆并获取指向它的基指针。我能想到的唯一解决方案是更改函数原型以接受已在堆上分配对象的 shared_ptr。但是,我真的很想避免在所有调用者中创建 shared_ptr,尤其是因为必须将 shared_ptr 复制到地图中。
有什么想法吗?
【问题讨论】:
-
“但是,我真的很想避免在所有调用者中创建 shared_ptr,尤其是因为必须将 shared_ptr 复制到地图中。”你的推理是错误的,特别是因为 shared_ptr 假设被插入到地图中,你应该更改函数签名。但不清楚为什么需要shared_ptr。 unique_ptr 应该足够了
标签: c++ pointers dictionary reference shared-ptr