'新运营商'和'运营商新'之间的区别?

“新操作员”和“操作员新”有什么区别?


我通常试图用不同的方式来区分这两者,但在任何情况下都是一个很好的问题。

operator new是一个分配原始内存的函数 - 至少在概念上,它与malloc()没有多大区别。 虽然这很不寻常,除非你写的东西像你自己的容器,你可以直接调用operator new,如:

char *x = static_cast<char *>(operator new(100));

也可以在全局或特定的类中重载运算符new。 IIRC,签名是:

void *operator new(size_t);

当然,如果你重载一个operator new(无论是全局还是一个类),你还需要/需要重载匹配的operator delete。 对于它的价值,还有一个单独的运算符new [],用于为数组分配内存 - 但几乎肯定会更好地忽略完全混乱。

新运营商是您通常用来从免费商店创建对象的内容:

my_class *x = new my_class(0);

两者之间的区别在于operator new只分配原始内存,没有别的。 new运算符通过使用operator new来分配内存,然后它调用正确类型的对象的构造函数,因此结果是在该内存中创建的真实活动对象。 如果该对象包含任何其他对象(嵌入或作为基类),那么也调用这些构造器。


“运营商新”

class Foo
{
public:
        void* operator new( size_t );
}

“新运营商”:

Foo* foo = new Foo();

在这个例子中, new Foo()调用Foo::operator new()

换句话说,“new operator”就像+运算符调用operator +()一样调用“ operator new()


以下是来自Scott Meyers的更有效的C ++书籍的引用:

新运算符调用一个函数来执行必要的内存分配,并且可以重写或重载该函数以更改其行为。 新运算符调用分配内存的函数的名称是operator new。

链接地址: http://www.djcxy.com/p/13761.html

上一篇: Difference between 'new operator' and 'operator new'?

下一篇: Why does the use of 'new' cause memory leaks?