首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

现实项目中会使用new操作吗

2012-09-24 
实际项目中会使用new操作吗?各位大虾,不知道在实际项目中,会否直接使用new来创建目标对象?对这个我比较困

实际项目中会使用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
[解决办法]
用的很多
[解决办法]
会用到的。
[解决办法]
必须用过啊!

热点排行