使用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())
Run Code Online (Sandbox Code Playgroud)
如果没有,还有另一种方法吗?
它确实有效,是的; 调用new只返回一个指向MyObject的指针,它可以在任何类型有效的地方使用.但是,对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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11758 次 |
| 最近记录: |