ptr_map插入

时间:2010-06-18 16:35:42

标签: c++ boost types insert boost-ptr-container

我有一些继承boost :: noncopyable的预定义类型(所以我必须将指针存储在这些对象中)。我使用 boost :: ptr_map 。据我所知,其中的第二个参数已经是一个指针。所以,代码:

ptr_map<string, boost::any> SomeMap;
typedef %Some noncopyable class/signature% NewType;

// Inserting now
boost::any *temp = new boost::any(new KeyEvent());
SomeMap.insert("SomeKey", temp);

错误是:

error: no matching function for call to ‘boost::ptr_map<std::basic_string<char>, boost::any>::insert(const char [11], boost::any*&)’


UPD :当我没有将指针传递给任何any temp = any(new KeyEvent());

我明白了:

error: no matching function for call to ‘boost::ptr_map<std::basic_string<char>, boost::any>::insert(const char [11], boost::any&)’

1 个答案:

答案 0 :(得分:6)

此版本的insert通过非const引用获取密钥,这意味着您不能使用临时值作为第一个值。这是为了防止内存泄漏;在你的代码中,如果字符串构造函数要抛出,temp会泄漏。

您必须在创建原始指针之前创建密钥对象:

string key("SomeKey");
any* temp = new whatever;
SomeMap.insert(key, temp);

或使用auto_ptr确保无论发生什么情况都删除对象:

auto_ptr<any> temp(new whatever);
SomeMap.insert("SomeKey", temp);