【发布时间】:2011-07-15 00:32:32
【问题描述】:
所以我有这样的功能:
boost::shared_ptr<my_class> get_class_by_name(std::string name)
{
typedef std::map<boost::shared_ptr<my_class>, my_description> map_t;
BOOST_FOREACH(map_t::value_type it, some_object.class_map)
{
my_description descr = it.second;
if(descr.name == name)
{
return it.first;
}
}
throw std::runtime_error("Class with such name was not found map not found!");
boost::shared_ptr<my_class> null;
return null;
}
我需要它返回这样的 boost::shared_ptr ,它不是 ptr 的副本,而是映射内部的指针。我的主要目标是用结果做这样的事情
boost::shared_ptr<my_class> result = get_class_by_name(name);
boost::shared_ptr<my_class> null;
result = null; //(or result.reset();)
然后用其他一些ptr重新分配map中的指针。 (我不需要删除该对象,因为在我清理地图 ptr 时它可以在其他线程中使用。)
【问题讨论】:
-
这毫无意义。为什么要按值搜索和按键操作?不应该正好相反吗?如果您需要同时查找两种类型的地图,请尝试使用 boost.bimap!那么只需说
erase。 -
这就是重点 - 我想在一段时间内清理对
my_class对象的引用,然后(使用描述)重新创建一个对象并将新对象的 ptr 放入地图中,放入原始 ptr 所在的位置. -
... 仍然没有得到它。为什么使用共享指针作为映射键?如果你把你的目标描述得更抽象一点,也许我们可以为此想出更好的设计?
标签: c++ boost shared-ptr