对象创建的特殊方式?

时间:2016-02-05 20:57:49

标签: c++ oop templates malloc new-operator

以下是实现创建对象的类的示例:

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

使用mallocnew运算符。

new的作用是什么?以上语法究竟是什么?

3 个答案:

答案 0 :(得分:5)

这是"placement new"。您的代码所做的是使用T创建一个malloc大小的原始内存,然后在该原始内存中构建一个新的T

答案 1 :(得分:2)

new(buf) MyObject是placement-new-operator。

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

似乎编写此代码的人试图在分配问题的情况下返回NULL,其中&#34;传统&#34;如果在分配期间出现问题,new会抛出异常(std::badalloc)。

通常我的经验是开发人员不熟悉异常处理,而是检查NULL而不是捕获异常。

答案 2 :(得分:1)

这是在那里使用的新展示位置:http://en.cppreference.com/w/cpp/language/new

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