创建对象的特殊方式



下面是实现用于创建对象的类的示例:

template <class T>
struct MallocCreator {
    static T* Create() {
        void* buf = std::malloc(sizeof(T));
        if (!buf) return 0;
        return new(buf) T;
    }
};

通过使用mallocnew运算符。

new的作用是什么,上面的语法到底是什么?

这是"放置新"。代码的作用是使用 malloc 为一个T的大小创建原始内存,然后在该原始内存中构造新T

new(buf) MyObject是放置新运算符。

它基本上是在说,buf是我为对象分配的一些内存,我希望C++在该内存中创建对象。 (常规new既会分配内存,又会构造一个对象。

似乎编写此代码的人试图在分配问题的情况下返回NULL,如果分配过程中出现问题,"常规"new会抛出异常(std::badalloc)。

通常,根据我的经验,开发人员对异常处理不满意,宁愿检查NULL也不愿捕获异常。

这是

那里新使用的位置:http://en.cppreference.com/w/cpp/language/new

首先,此代码通过 malloc 分配内存,然后在分配的内存中构造对象。

相关内容

  • 没有找到相关文章

最新更新