下面是实现用于创建对象的类的示例:
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
的作用是什么,上面的语法到底是什么?
这是"放置新"。代码的作用是使用 malloc
为一个T
的大小创建原始内存,然后在该原始内存中构造新T
。
new(buf) MyObject
是放置新运算符。
它基本上是在说,buf
是我为对象分配的一些内存,我希望C++在该内存中创建对象。 (常规new
既会分配内存,又会构造一个对象。
似乎编写此代码的人试图在分配问题的情况下返回NULL
,如果分配过程中出现问题,"常规"new会抛出异常(std::badalloc
)。
通常,根据我的经验,开发人员对异常处理不满意,宁愿检查NULL
也不愿捕获异常。
那里新使用的位置:http://en.cppreference.com/w/cpp/language/new
首先,此代码通过 malloc 分配内存,然后在分配的内存中构造对象。