实际项目中会使用new操作吗?
各位大虾,不知道在实际项目中,会否直接使用new来创建目标对象?对这个我比较困惑。
还是会考虑使用类似stl中的allocator之类的来管理内存。还请高手大虾们明示
以下是我碰到的实际小例子。
- C/C++ code
#include <iostream>#include <boost/shared_ptr.hpp>#include <vector>class IObj{public: virtual void foo() = 0;};typedef boost::shared_ptr<IObj> IObjPtr;class CObjA:public IObj{public: virtual void foo() {std::cout<< "CObjA::foo().\n" ;}};class CObjB:public IObj{public: virtual void foo() {std::cout<< "CObjB::foo().\n" ;}};class CObjManager{ std::vector<IObjPtr> m_Ptrs;public: //some operation of manager //foo example void Traversal() { typedef std::vector<IObjPtr>::iterator iterator; for (iterator it = m_Ptrs.begin();it != m_Ptrs.end(); ++it) { (*it)->foo(); } } void insert(IObjPtr p) { m_Ptrs.push_back(p); }};int main(){ CObjManager mana; //以下使用了new。 mana.insert(IObjPtr(new CObjA())); mana.insert(IObjPtr(new CObjB())); mana.Traversal(); return 0;}[解决办法]
当然会,而且很普遍啊
不过需要注意的是,new的标准行为是出错抛异常,所以标准用法是try+new,new后面跟NULL判断是没有任何意义的
有些诸如XXX面试宝典之类的说法会误导你,要注意
如果想让new和malloc一样失败返回NULL,用new (std::nothrow),不过不知道为什么,在VC上用会让exe也生成导入库lib,比较坑爹……
[解决办法]
会用,不过一般用内存池的方式。
初始化的时候先new一大段内存。
[解决办法]
一直用malloc,不用new什么的
[解决办法]
new或malloc的最大问题是内存碎片,所以一般占内存比较大的系统都是自己做内存池来管理
占内存小的用不用关系不大
[解决办法]
肯定用。只要是你见过的,肯定都是有人用。你没见过的,也有人用
[解决办法]
C语言只能malloc不能new
[解决办法]
用的很多
[解决办法]
会用到的。
[解决办法]
必须用过啊!