Boost.Assign:使用带有map_list_of的对象?

时间:2011-09-23 16:09:17

标签: c++ boost stdmap

使用C ++和boost。在Boost.Assign中我可以将new运算符与map_list_of一起使用吗?

例如:

std::map<int, MyObject*> objects = boost::assign::map_list_of
       (1, new MyObject())(2, new MyObject())(3, new MyObject())

如果没有,还有其他办法吗?

2 个答案:

答案 0 :(得分:5)

它确实有效,是的;调用new只返回一个指向MyObject的指针,它可以在任何类型有效的地方使用。 HOWEVER 对new的调用可能会抛出异常,或者MyObject的构造函数可能会抛出异常,这意味着您的整个堆分配的MyObjects映射将被泄露。

如果您想要异常安全以及无需删除这些对象,则应使用智能指针:

std::map<int, boost::shared_ptr<MyObject> > objects = boost::assign::map_list_of<int, boost::shared_ptr<MyObject> >
    (1, new MyObject())
    (2, new MyObject())
    (3, new MyObject());

答案 1 :(得分:3)

似乎是的。这与VS2010&amp;提升1.47。

#include <boost\assign.hpp>
class MyObject{
public:
    MyObject(int i):m_i(i){}
private:
    int m_i;
};


int main (void)
{
    std::map<int, MyObject*> objects = boost::assign::map_list_of(1, new MyObject(1))(2, new MyObject(2))(3, new MyObject(3));
}