以下是实现创建对象的类的示例:
template <class T>
struct MallocCreator {
static T* Create() {
void* buf = std::malloc(sizeof(T));
if (!buf) return 0;
return new(buf) T;
}
};
使用malloc
和new
运算符。
new
的作用是什么?以上语法究竟是什么?
答案 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分配内存,然后在分配的内存中构造对象。