'新运营商'和'运营商新'之间的区别?
“新操作员”和“操作员新”有什么区别?
我通常试图用不同的方式来区分这两者,但在任何情况下都是一个很好的问题。
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