使用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())
如果没有,还有其他办法吗?
答案 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));
}